#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXV 100001
#define MAXN 101
#define INF -100000000
using namespace std;
int d[MAXV],weight[MAXN],cnt[MAXN],V;
void OneZeroPack(
int c,
int w)
{
int i;
for(i=V; i>=c; i--)
d[i]=max(d[i],d[i-c]+w);
}
void CompletePack(
int c,
int w)
{
int i;
for(i=c; i<=V; i++)
d[i]=max(d[i],d[i-c]+w);
}
void MultPack(
int c,
int w,
int n)
{
if(n*c>=V)
{
CompletePack(c,w);
return ;
}
int k=
1;
while(k<=n)
{
OneZeroPack(k*c,k*w);
n=n-k;
k=k*
2;
}
OneZeroPack(n*c,n*w);
}
int main()
{
int n,i;
while(
scanf(
"%d %d",&n,&V)==
2&&(n||V))
{
for(i=
0;i<=V;i++) d[i]=INF;
d[
0]=
0;
for(i=
0;i<n;i++)
scanf(
"%d",&weight[i]);
for(i=
0;i<n;i++)
scanf(
"%d",&cnt[i]);
for(i=
0;i<n;i++)
MultPack(weight[i],weight[i],cnt[i]);
int ans=
0;
for(i=
1;i<=V;i++)
if(d[i]>
0)
ans++;
printf(
"%d\n",ans);
}
return 0;
}