#include<iostream>
#define MAXN 20
using namespace std;
int maxv = 0;
int x[MAXN] = {-1};
void dfs(int w[],int v[],int n,int W){
int i=1;
int tw=0;
int tv=0;
x[i] = -1;
while(i>=1){
x[i]++;
if(x[i]<=1){//如果x[i]>1,则说明 未找到符合条件的值
if(i==n){
for(int j=1;j<=n;j++){
tw = tw + w[j]*x[j];
tv = tv + v[j]*x[j];
}
if(tv>maxv&&tw<=W){
maxv = tv;
}
tv = 0;
tw = 0;
}
else{
i++;
x[i] = -1;//为下一层初始化赋值
}
}else{
i--;
}
}
}
int main()
{
int w[MAXN],v[MAXN],n,W;
cin>>n;
for(int i=1;i<=n;i++){
cin>>w[i];
}
for(int i=1;i<=n;i++){
cin>>v[i];
}
cin>>W;
dfs(w,v,n,W);
cout<<"最大总价值为:"<<maxv<<endl;
return 0;
}