AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
bool dp[100001];
int main(){
int price[101], count[101];
int n, m;
while( cin >> n >> m && !( n == 0 && m == 0 ) ){
for( int i = 0; i < n; i++ ){
cin >> price[i];
}
for( int i = 0; i < n; i++ ){
cin >> count[i];
}
memset( dp, false, sizeof( dp ) );
dp[0] = true;
for( int i = 0; i < n; i++ ){
int k;
for( k = 1; 2 * k - 1 < count[i]; k *= 2 ){
for( int j = m; j >= k * price[i]; j-- ){
if( dp[j-k*price[i]] ){
dp[j] = true;
}
}
}
k = count[i] - k + 1;
for( int j = m; j >= k * price[i]; j-- ){
if( dp[j-k*price[i]] ){
dp[j] = true;
}
}
}
int ans = 0;
for( int i = 1; i <= m; i++ ){
if( dp[i] ){
ans++;
}
}
cout << ans << endl;
}
return 0;
}