#include #define int long long using namespace std; const int N=1000010; const int mod=998244353; const int INF=0x3f3f3f3f3f3f3f3f; struct BIT{ int t[N<<1]; void clear(){ memset(t,0x3f,sizeof(t)); return; } int lowbit(int x){return x&-x;} void update(int x,int y){ x++; for(int i=x;i<=N-10;i+=lowbit(i))t[i]=min(t[i],y); return; } int query(int x){ x++; int res=INF; for(int i=x;i>=1;i-=lowbit(i))res=min(res,t[i]); return res; } }TA1,TA2; int n; int a[N]; int x[N],y[N]; int dp[N]; signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>x[i]; for(int i=1;i<=n;i++)cin>>y[i]; TA1.clear(); TA2.clear(); TA1.update(x[1],dp[0]-x[1]+y[1]); TA2.update(N-10-x[1],dp[0]+x[1]+y[1]); for(int i=1;i<=n;i++){ dp[i]=a[i]+TA1.query(a[i]); dp[i]=min(dp[i],TA2.query(N-10-a[i])-a[i]); if(i==n)break; TA1.update(x[i+1],dp[i]-x[i+1]+y[i+1]); TA2.update(N-10-x[i+1],dp[i]+x[i+1]+y[i+1]); } cout<