#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,v[155],a[155],f[155][155],ans,d[155][155];
signed main()
{
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[i][j]=-6e9-7;
}
}
for(int i=1;i<=n;i++){
cin>>v[i];
}
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][i]=v[1];
d[i][i]=1;
}
for(int l=2;l<=n;l++){
for(int i=1;i+l-1<=n;i++){
int j=i+l-1;
if(l>=3){
if(abs(a[i]-a[j])==1){
f[i][j]=max(f[i][j],f[i+1][j-1]+v[2]);
}
}
if(l==2){
d[i][j]=(abs(a[i]-a[j])==1);
f[i][j]=f[i][i]+f[j][j];
if(d[i][j]==1){
f[i][j]=max(f[i][j],v[2]);
}
continue;
}
if(((a[i+1]<a[i])&&(a[i+1]<a[i+2]))||d[i+1][j]==0||abs(a[i+1]-a[i])!=1){
}
else{
d[i][j]=1;
f[i][j]=max(f[i][j],v[l]);
}
if(((a[j-1]<a[j])&&(a[j-1]<a[j-2]))||d[i][j-1]==0||abs(a[j-1]-a[j])!=1){
}
else{
d[i][j]=1;
f[i][j]=max(f[i][j],v[l]);
}
for(int k=i+1;k<=j-2;k++){
f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);
if(((a[k+1]<a[k])&&(a[k+1]<a[k+2]))||((a[k]<a[k-1])&&(a[k]<a[k+1]))||abs(a[k]-a[k+1])!=1||d[i][k]==0||d[k+1][j]==0){
continue;
}
f[i][j]=max(f[i][j],v[l]);
d[i][j]=1;
}
}
}
for(int l=1;l<=n;l++){
for(int i=1;i+l-1<=n;i++){
int j=i+l-1;
ans=max(ans,f[i][j]);
}
}
cout<<ans;
return 0;
}