?
?1?#include<iostream>
?2?using?namespace?std;
?3?int?cnt[100001];
?4?bool??f[100001];
?5?typedef?struct{
?6?????int?value,num;????
?7?}S;
?8?S?coin[110];
?9?int?main()
10?{
11?????int?n,m;
12?????int?i,j,k,count;
13?????while(scanf("%d%d",&n,&m)!=EOF)
14?????{
15?????????if(n==0&&m==0)?break;
16?????????for(i=0;i<n;i++)
17?????????scanf("%d",&coin[i].value);
18?????????for(i=0;i<n;i++)
19?????????scanf("%d",&coin[i].num);
20?????????for(i=1;i<=m;i++)
21?????????f[i]=false;
22?????????f[0]=true;
23?????????count=0;
24?????????for(i=0;i<n;i++)
25?????????{
26?????????????for(j=0;j<=m;j++)
27?????????????cnt[j]=0;
28?????????????for(j=coin[i].value;j<=m;j++)
29?????????????{
30?????????????????if(!f[j]&&f[j-coin[i].value]&&cnt[j-coin[i].value]<coin[i].num)//?key?point?
31?????????????????{cnt[j]=cnt[j-coin[i].value]+1;f[j]=true;count++;}????//here?we?use?cnt[]?to
32?????????????????????????????????????????????//record?the?num?of?coins
33?????????????????????????????????????????????//?of?this?kind?has?used;
34?????????????}????
35?????????}
36?????????printf("%d\n",count);????
37?????}????
38?????return?0;????
39?}
40?