#include<bits/stdc++.h>
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i)
using ll = int64_t;
using namespace std;
int memo[1001][100001];
int value[1001];
int weight[1001];
int n,C;
int dp(int id, int remW){
if((id==n) || remW==0) return 0;
if(memo[id][remW] != -1){
return memo[id][remW];
}
if(remW < weight[id]){
return memo[id][remW] = dp(id+1, remW); //moved on
}
return memo[id][remW] = max(dp(id+1, remW), value[id]+dp(id+1, remW - weight[id]));
}
void solve(int kes){
//write solution here
cin>>n>>C;
FOR(i, 0, n) cin>>weight[i];
FOR(i, 0, n) cin>>value[i];
memset(memo, -1, sizeof memo);
printf("%d\n", dp(0, C));
}
int main(){
//freopen("in.in","r",stdin);
//freopen("out.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t=1;
//cin>>t;
for(int i = 0; i < t; i++)
solve(t);
}