#include <bits/stdc++.h>
using namespace std;
int grid[1005][100005];
int h[1005], s[1005];
int n,x;
bool finished[1005][100005];
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<=n; j++) {
// ga diambil
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];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZ3JpZFsxMDA1XVsxMDAwMDVdOwppbnQgaFsxMDA1XSwgc1sxMDA1XTsKaW50IG4seDsKYm9vbCBmaW5pc2hlZFsxMDA1XVsxMDAwMDVdOwoKaW50IG1haW4oKSB7CgljaW4gPj4gbiA+PiB4OwoKCWZvcihpbnQgaT0xOyBpPD1uOyBpKyspIHsKCQljaW4gPj4gaFtpXTsKCX0KCWZvcihpbnQgaT0xOyBpPD1uOyBpKyspIHsKCQljaW4gPj4gc1tpXTsKCX0KCglmb3IoaW50IGk9MTsgaTw9bjsgaSsrKSB7CgkJZm9yKGludCBqPTE7IGo8PW47IGorKykgewoJCQkvLyBnYSBkaWFtYmlsCgkJCWdyaWRbaV1bal09Z3JpZFtpLTFdW2pdOwoKCQkJLy8gYW1iaWwKCQkJaWYoaj49aFtpXSkgewoJCQkJZ3JpZFtpXVtqXT1tYXgoZ3JpZFtpXVtqXSwgZ3JpZFtpLTFdW2otaFtpXV0rc1tpXSk7CgkJCX0KCQl9Cgl9Cgljb3V0IDw8IGdyaWRbbl1beF07Cn0=