#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
const int N=5e4;
int n,m,sum=0,maxn,ans=0x3f3f3f3f;
int v[N],c[N],f[N],g[N];
signed main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",v+i);maxn=max(maxn,v[i]*v[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d",c+i);sum+=v[i]*c[i];
}
if(sum<m)
{
printf("-1\n");return 0;
}
for(int i=1;i<=n;i++)
{
if(m==v[i] and c[i]!=0)
{
printf("1\n");return 0;
}
}
memset(f,0x3f,sizeof(f));f[0]=0;
memset(g,0x3f,sizeof(g));g[0]=0;
for(int i=1;i<=n;i++)
{
for(int j=v[i];j<=maxn;j++)
{
g[j]=min(g[j],g[j-v[i]]+1);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=c[i];j<<=1)
{
for(int k=m+maxn;k>=j*v[i];k--)
{
f[k]=min(f[k],f[k-j*v[i]]+j);
}
c[i]-=j;
}
if(c[i]!=0)
{
for(int k=m+maxn;k>=c[i]*v[i];k--)
{
f[k]=min(f[k],f[k-c[i]*v[i]]+c[i]);
}
}
}
for(int i=m;i<=m+maxn;i++)
{
ans=min(ans,f[i]+g[i-m]);
}
printf("%d\n",ans==0x3f3f3f3f?-1:ans);
return 0;
}