#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int a[1005];
int b[1005];
int c[1005];
int dp[1001][3][1001];
int win(int x){
if(x==0)return 1;
if(x==1)return 2;
if(x==2)return 0;
}
int lose(int x){
if(x==0)return 2;
if(x==1)return 0;
if(x==2)return 1;
}
int pk(int x,int y,int i){
if(x==y)return a[i];
if(x==win(y))return 2*a[i];
if(x==lose(y))return 0;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
b[i]+=b[i-1];
}
for(int i=1;i<=n;i++){
cin>>c[i];
}
dp[1][win(c[1])][0]=2*a[1];
dp[1][c[1]][0]=a[1];
dp[1][lose(c[1])][0]=0;
for(int i=2;i<=n;i++){
for(int j=0;j<3;j++){
for(int k=0;k<n;k++){
int mx=max(dp[i-1][0][k-1],max(dp[i-1][1][k-1],dp[i-1][2][k-1]));
int po;
if(mx==dp[i-1][0][k-1])po=0;
if(mx==dp[i-1][1][k-1])po=1;
if(mx==dp[i-1][2][k-1])po=2;
dp[i][j][k]=max(dp[i-1][j][k]+pk(j,c[i],i),dp[i-1][po][k-1]+pk(j,c[i],i));
}
}
}
int ans=0;
for(int j=0;j<3;j++){
for(int k=0;k<n;k++){
ans=max(ans,dp[n][j][k]-b[k]);
}
}
cout<<ans;
return 0;
}