#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e6+10;
int k[maxn],c[maxn],dp[maxn];
signed main()
{
int n,m=0,M;
cin>>n>>M;
for(int i=1;i<=n;i++) cin>>k[i];
for(int i=1;i<=n;i++) cin>>c[i],m+=k[i]*c[i];
dp[0]=1;
for(int i=1;i<=n;i++)
for(int j=m;j>=0;j--)
for(int p=0;p<=k[i]&&p*c[i]<=j;p++) dp[j]=max(dp[j],dp[j-p*c[i]]*p);
for(int i=0;i<=m;i++)
if(dp[i]>=M)
{
cout<<i;
return 0;
}
}
建议各位在第15行处加个限制条件dp[j]<m,不然数据范围大一点,数据强的话可能会把代码卡掉