题
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+10,K=15e3+10;
int n,k,ans;
int w[N],win[N],v[N];
int p[N];
int f[K];
signed main() {
memset(p,0x3f,sizeof p);
p[1]=0;
for(int i=1;i<=1000;i++) {
for(int j=1;j<=2000;j++) {
if(i+(int)round(1.0*i/j)>1000)continue;
p[i+(int)round(1.0*i/j)]=min(p[i+(int)round(1.0*i/j)],p[i]+1);
}
}
cin>>n>>k;
for(int i=1;i<=n;i++) {
cin>>win[i];
w[i]=p[win[i]];
}
for(int i=1;i<=n;i++)cin>>v[i];
k=min(k,15000ll);
for(int i=1;i<=n;i++) {
for(int j=k;j>=w[i];j--)ans=max(ans,f[j]=max(f[j],f[j-w[i]]+v[i]));
}
cout<<ans<<endl;
return 0;
}