#include<bits/stdc++.h>
using namespace std;
int n,max_wt;
int val[100],wt[100];
int dp[100][1000];
int knapsack(int i,int ava_wt)
{
if(ava_wt==0)
return 0;
if(i==n)
return 0;
if(dp[i][ava_wt]!=-1)
return dp[i][ava_wt];
if(ava_wt>=wt[i])
{
int niye=val[i]+knapsack(i+1,ava_wt-wt[i]);
int naniye=knapsack(i+1,ava_wt);
return dp[i][ava_wt]=max(niye,naniye);
}
else
{
return knapsack(i+1,ava_wt);
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>wt[i];
}
for(int i=0;i<n;i++)
{
cin>>val[i];
}
cin>>max_wt;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=max_wt;j++)
{
dp[i][j]=-1;
}
}
int max=knapsack(0,max_wt);
cout<<max<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG4sbWF4X3d0OwppbnQgdmFsWzEwMF0sd3RbMTAwXTsKaW50IGRwWzEwMF1bMTAwMF07CmludCBrbmFwc2FjayhpbnQgaSxpbnQgYXZhX3d0KQp7CmlmKGF2YV93dD09MCkKcmV0dXJuIDA7CmlmKGk9PW4pCnJldHVybiAwOwppZihkcFtpXVthdmFfd3RdIT0tMSkKcmV0dXJuIGRwW2ldW2F2YV93dF07CmlmKGF2YV93dD49d3RbaV0pCnsKaW50IG5peWU9dmFsW2ldK2tuYXBzYWNrKGkrMSxhdmFfd3Qtd3RbaV0pOwppbnQgbmFuaXllPWtuYXBzYWNrKGkrMSxhdmFfd3QpOwpyZXR1cm4gZHBbaV1bYXZhX3d0XT1tYXgobml5ZSxuYW5peWUpOwp9CmVsc2UKewpyZXR1cm4ga25hcHNhY2soaSsxLGF2YV93dCk7Cn0KfQoKaW50IG1haW4oKQp7CgpjaW4+Pm47CmZvcihpbnQgaT0wO2k8bjtpKyspCnsKY2luPj53dFtpXTsKfQpmb3IoaW50IGk9MDtpPG47aSsrKQp7CmNpbj4+dmFsW2ldOwp9CmNpbj4+bWF4X3d0Owpmb3IoaW50IGk9MDtpPD1uO2krKykKewpmb3IoaW50IGo9MDtqPD1tYXhfd3Q7aisrKQp7CmRwW2ldW2pdPS0xOwp9Cn0KCmludCBtYXg9a25hcHNhY2soMCxtYXhfd3QpOwpjb3V0PDxtYXg8PGVuZGw7Cn0=