#include <iostream>
#include <cstdio>
using namespace std;
const long long M = 100001;
bool dpall[M];
long long A[101];
long long C[101];
long long alldata[M];
int coins = 0;
long long sets = 0;
long long m;
void setdpallahead(){
for (int i = 0; i < M; i++) {
dpall[i] = false;
alldata[i] = 0;
}
}
void setdp(){
sets = 0;
setdpallahead();
for (int i = 1; i <= coins; i++) {
if (i==1) {
for(int j=1; j<=C[1]&&j*A[1]<=m; j++){
dpall[j*A[1]] = true;
alldata[++sets] = j*A[i];
}
}
else{
long long prevsets = sets;
for (int j = 0; j <= prevsets ; j++) {
for (int k = 1; k<=C[i]; k++) {
if (alldata[j]+k*A[i]>m) {
break;
}
if (!dpall[alldata[j]+k*A[i]]) {
dpall[alldata[j]+k*A[i]] = true;
alldata[++sets] = alldata[j]+k*A[i];
}
}
}
}
}
}
int main(){
scanf("%d%lld", &coins, &m);
while (coins!=0||m!=0) {
for (int i = 1; i <= coins; i++) {
scanf("%lld", &A[i]);
}
for (int i = 1; i <= coins; i++) {
scanf("%lld", &C[i]);
}
setdp();
printf("%lld\n", sets);
scanf("%d%lld", &coins, &m);
}
return 0;
}