反向背包
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int w[N],v[N],f[30*N];
int n,m;
int main()
{
cin>>n>>m;
int sum=0;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=1;i<=n;i++) cin>>v[i],sum+=v[i];
memset(f,0x3f,sizeof f);
f[0]=0;
for(int i=1;i<=n;i++)
{
for(int j=sum;j>=v[i];j--)
f[j]=min(f[j],f[j-v[i]]+w[i]);
}
for(int i=sum;i>=0;i--)
{
if(f[i]<=m)
{
cout<<i<<endl;
break;
}
}
return(0);
}