#include using namespace std; const int N=3e5+5; const long long inf=1e18; int a[N]; int x[N]; int y[N]; long long dp[N]; struct node { long long k,b; int l,r; long long gety(long long x){return k*x+b;} }tr[N<<2]; void build(int id,int l,int r) { tr[id]={0,inf,l,r}; if(l==r) return; int mid=(l+r)>>1; build(id<<1,l,mid); build(id<<1|1,mid+1,r); } void change(int id,node p) { int l=tr[id].l,r=tr[id].r; int mid=(l+r)>>1; if(p.l<=l&&r<=p.r) { if(p.gety(l)mid) change(id<<1|1,p); } } long long query(int id,int x) { if(tr[id].l==tr[id].r) return tr[id].gety(x); int mid=(tr[id].l+tr[id].r)>>1; long long ans=tr[id].gety(x); if(x<=mid) return min(ans,query(id<<1,x)); else return min(ans,query(id<<1|1,x)); } int main() { int n; cin>>n; build(1,-200000,200000); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=n;i++) scanf("%d",&x[i]); for(int i=1;i<=n;i++) scanf("%d",&y[i]); change(1,{x[1],1LL*y[1]*y[1]+1LL*x[1]*x[1],-200000,200000}); for(int i=1;i<=n;i++) { dp[i]=1LL*a[i]*a[i]+query(1,-2LL*a[i]); change(1,{x[i+1],1LL*y[i+1]*y[i+1]+1LL*x[i+1]*x[i+1]+dp[i],-200000,200000}); } cout<