#include <bitset>
#include <iostream>
#include <iomanip>
using namespace std;

/*
0/1-Rucksack als dynamisches Programm
*/



unsigned long formel(
	unsigned int n, unsigned int v[], unsigned int g[], unsigned int w[],
	unsigned int i, unsigned int h){
   if (i==0) return 0 ;
   if (i>0 && h< g[i]) return w[i-1 + n*h] ;

   unsigned int m1= w[i-1 + n*h];
   unsigned int m2= w[i-1 + n*(h-g[i])]+v[i];
   if (m1 > m2) return m1;
   return m2;
};


int main(){

unsigned int n;
cin >> n;

unsigned int G;
cin >> G;

unsigned int v[n+1];
unsigned int g[n+1];

for (unsigned int i=1; i<= n; i++) cin >> v[i];
for (unsigned int i=1; i<= n; i++) cin >> g[i];

unsigned int w[n*(G+1)];


for(unsigned int i=0; i<n;i++) {
// cout  << i;
   for(unsigned int h=0; h<=G;h++) {
	w[i+n*h]=formel(n,v,g,w, i,h);
// cout  <<" "<< w[i+n*h];
   }
//  cout << "\n";
}

cout << "\nResultat: "<<formel(n,v,g,w, n,G) << "\n";

}