#include<bits/stdc++.h>
#define MAXN 214
#define MAXM 20010
using namespace std;
int b[MAXN],c[MAXN],jl[MAXN];
int w[MAXN<<5],v[MAXN<<5];
int f[MAXM];
int ans[MAXN];
bool vis[MAXN];
int cnt=0;
int n,k;
void dfs(int x){
if(x==0){
for(int i=1;i<=n;i++) cout << ans[i] << " ";
exit(0);
}
for(int i=1;i<=cnt;i++){
if(vis[i] || w[i]>x) continue;
if(f[x]==f[x-w[i]]+v[i]){
vis[i]=1;
ans[jl[i]]+=c[i];
dfs(x-w[i]);
ans[jl[i]]-=c[i];
vis[i]=0;
}
}
}
int main(){
cin >> n;
for(int i=1;i<=n;i++) vis[i]=0;
for(int i=1;i<=n;i++) cin >> b[i];
for(int i=1;i<=n;i++) cin >> c[i];
cin >> k;
f[0]=0;
for(int i=1;i<=k;i++) f[i]=100000000;
for(int i=1;i<=n;i++){
for(int j=0;(1<<j)<=c[i];j++){
cnt++;
w[cnt]=(1<<j)*b[i];
v[cnt]=(1<<j);
jl[cnt]=i;
c[i]-=(1<<j);
}
if(c[i]){
cnt++;
w[cnt]=c[i]*b[i];
v[cnt]=c[i];
jl[cnt]=i;
}
}
for(int i=1;i<=cnt;i++){
for(int j=k;j>=w[i];j--){
if(f[j]>f[j-w[i]]+v[i]){
f[j]=f[j-w[i]]+v[i];
}
}
}
cout << f[k] << endl;
dfs(k);
return 0;
}