#include <bits/stdc++.h>
using namespace std;
int knapSack(int W, int wt[], int val[], int n)
{
int dp[W + 1];
memset(dp, 0, sizeof(dp));
for (int i = 1; i < n + 1; i++) {
for (int w = W; w >= 0; w--) {
if (wt[i - 1] <= w) dp[w] = max(dp[w],dp[w - wt[i - 1]] + val[i - 1]);
}
}
return dp[W];
}
int main()
{
int n,wt;
cin>>n>>wt;
int weight[n],profit[n];
for(int a=0;a<n;a++){
cin>>weight[a];
}
for(int a=0;a<n;a++){
cin>>profit[a];
}
int a = sizeof(profit) / sizeof(profit[0]);
cout << knapSack(wt, weight, profit, a);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBrbmFwU2FjayhpbnQgVywgaW50IHd0W10sIGludCB2YWxbXSwgaW50IG4pCnsKICAgIGludCBkcFtXICsgMV07CiAgICBtZW1zZXQoZHAsIDAsIHNpemVvZihkcCkpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuICsgMTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgdyA9IFc7IHcgPj0gMDsgdy0tKSB7CiAgICAgICAgICAgIGlmICh3dFtpIC0gMV0gPD0gdykgZHBbd10gPSBtYXgoZHBbd10sZHBbdyAtIHd0W2kgLSAxXV0gKyB2YWxbaSAtIDFdKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZHBbV107Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgbix3dDsKICAgIGNpbj4+bj4+d3Q7CiAgICBpbnQgd2VpZ2h0W25dLHByb2ZpdFtuXTsKICAgIGZvcihpbnQgYT0wO2E8bjthKyspewogICAgICAgIGNpbj4+d2VpZ2h0W2FdOwogICAgfQogICAgZm9yKGludCBhPTA7YTxuO2ErKyl7CiAgICAgICAgY2luPj5wcm9maXRbYV07CiAgICB9CiAgICBpbnQgYSA9IHNpemVvZihwcm9maXQpIC8gc2l6ZW9mKHByb2ZpdFswXSk7CiAgICBjb3V0IDw8IGtuYXBTYWNrKHd0LCB3ZWlnaHQsIHByb2ZpdCwgYSk7CiAgICByZXR1cm4gMDsKfQo=