#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int Read() {int x=0,f=1;char ch=getchar();while(ch<48||ch>57) {if(ch==45)f=-1;ch=getchar();}while(ch>=48&&ch<=57) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return x*f;}
inline void Write(int x){if(!x){putchar('0'),putchar('\n');return;}if(x<0)putchar('-'),x=-x;char a[20];int i=0;while(x)a[++i]=x%10+48,x/=10;for(;i;i--)putchar(a[i]);putchar('\n');}
const int N=1e5+10,M=1e5+10;
int b[N],c[N],dp[N][2];
deque<int>minn;
signed main()
{
int n=Read();
for(int i=1;i<=n;i++)b[i]=Read();
for(int i=1;i<=n;i++)c[i]=Read();
int w=Read();
memset(dp,0x3f3f3f3f,sizeof(dp));
dp[0][0]=dp[0][1]=0;
for(int i=1;i<=n;i++)
{
c[i]=min(c[i],w/b[i]);
// cout<<c[i]<<endl;
for(int j=0;j<b[i];j++)
{
while(minn.size())minn.pop_back();
for(int k=0;k<=(w-j)/b[i];k++)
{
while(minn.size()&&dp[j+b[i]*minn.back()][i&1]-minn.back()>=dp[j+b[i]*k][i&1]-k)minn.pop_back();
minn.push_back(k);
while(minn.size()&&k-minn.front()>c[i])minn.pop_front();
dp[j+k*b[i]][(i+1)&1]=min(dp[j+k*b[i]][(i+1)&1],dp[j+minn.front()*b[i]][i&1]+k-minn.front());
}
}
}
// for(int i=1;i<=w;i++)cout<<dp[i][n&1]<<" ";
// cout<<endl;
// for(int i=1;i<=w;i++)cout<<dp[i][(n+1)&1]<<" ";
cout<<dp[w][(n+1)&1]<<endl;
return 0;
}