#include <bits/stdc++.h>
using namespace std;
int grid[1005][100005];
int h[1005], s[1005];
int n,x;
bool finished[1005][100005];
int solve(int i, int j) {
if(i==0) {
return 0;
}
if(finished[i][j]) return grid[i][j];
finished[i][j]=true;
// ga diambil
grid[i][j]=solve(i-1, j);
// ambil
if(j>=h[i]) {
grid[i][j]=max(grid[i][j], solve(i-1, j-h[i])+s[i]);
}
return grid[i][j];
}
int main() {
cin >> n >> x;
for(int i=1; i<=n; i++) {
cin >> h[i];
}
for(int i=1; i<=n; i++) {
cin >> s[i];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= x; j++) {
//ga ambil
grid[i][j]=grid[i-1][j];
// ambil
if(j>=h[i]) {
grid[i][j]=max(grid[i][j], grid[i-1][j-h[i]]+s[i]);
}
}
}
cout << grid[n][x] << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZ3JpZFsxMDA1XVsxMDAwMDVdOwppbnQgaFsxMDA1XSwgc1sxMDA1XTsKaW50IG4seDsKYm9vbCBmaW5pc2hlZFsxMDA1XVsxMDAwMDVdOwoKaW50IHNvbHZlKGludCBpLCBpbnQgaikgewoJaWYoaT09MCkgewoJCXJldHVybiAwOwoJfQoKCWlmKGZpbmlzaGVkW2ldW2pdKSByZXR1cm4gZ3JpZFtpXVtqXTsKCWZpbmlzaGVkW2ldW2pdPXRydWU7CgoJLy8gZ2EgZGlhbWJpbAoJZ3JpZFtpXVtqXT1zb2x2ZShpLTEsIGopOwoKCS8vIGFtYmlsCglpZihqPj1oW2ldKSB7CgkJZ3JpZFtpXVtqXT1tYXgoZ3JpZFtpXVtqXSwgc29sdmUoaS0xLCBqLWhbaV0pK3NbaV0pOwoJfQoKCXJldHVybiBncmlkW2ldW2pdOwp9CgppbnQgbWFpbigpIHsKCWNpbiA+PiBuID4+IHg7CgoJZm9yKGludCBpPTE7IGk8PW47IGkrKykgewoJCWNpbiA+PiBoW2ldOwoJfQoJZm9yKGludCBpPTE7IGk8PW47IGkrKykgewoJCWNpbiA+PiBzW2ldOwoJfQoKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWZvciAoaW50IGogPSAxOyBqIDw9IHg7IGorKykgewoJCQkvL2dhIGFtYmlsCgkJCWdyaWRbaV1bal09Z3JpZFtpLTFdW2pdOwoKCQkJLy8gYW1iaWwKCQkJaWYoaj49aFtpXSkgewoJCQkJZ3JpZFtpXVtqXT1tYXgoZ3JpZFtpXVtqXSwgZ3JpZFtpLTFdW2otaFtpXV0rc1tpXSk7CgkJCX0KCQl9Cgl9Cgljb3V0IDw8IGdyaWRbbl1beF0gPDwgZW5kbDsKfQ==