#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-') f=-1;ch=getchar(); }
while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+ch-'0';ch=getchar(); }
return x*f;
}
const int Maxn=3e2+5;
int n,ans=-1e9;
int v[Maxn],a[Maxn];
inline void dfs(int x,int score)
{
ans=max(ans,score);
if(x==n)
{
return;
}
else
{
for(int i=1;i<=a[0];i++)
{
for(int j=i;j<=a[0];j++)
{
bool f=1;
int tmp[Maxn];
for(int k=0;k<=a[0];k++) tmp[k]=a[k];
for(int k=i+1;k<=j;k++)
{
if(a[k]-a[k-1]!=1)
{
f=0;break;
}
}
for(int k=i+1;k<=j-1;k++)
{
if(a[k]<=a[k+1]&&a[k]<=a[k-1])
{
f=0;break;
}
}
if(f==0) continue;
a[0]=0;
for(int k=1;k<i;k++) a[++a[0]]=tmp[k];
for(int k=j+1;k<=tmp[0];k++) a[++a[0]]=tmp[k];
dfs(x+j-i+1,score+v[j-i+1]);
for(int k=0;k<=tmp[0];k++) a[k]=tmp[k];
}
}
}
}
int main()
{
n=read();
for(int i=1;i<=n;i++) v[i]=read();
for(int i=1;i<=n;i++) a[i]=read();
a[0]=n;
dfs(0,0);
if(ans==0) printf("3");
else printf("%d",ans);
return 0;
}