#include<map>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<algorithm>
using namespace std;
int f[41][41][41][41],i,j,k,a[351],b[121],c[5],n,m;
int serch(int x)
{
if (f[c[1]][c[2]][c[3]][c[4]]) return f[c[1]][c[2]][c[3]][c[4]];
int xx,y,z,v;
xx=y=z=v=0;
if (c[1]){c[1]--;xx=serch(x-1)+a[x];c[1]++;}
if (c[2]){c[2]--;y=serch(x-2)+a[x];c[2]++;}
if (c[3]){c[3]--;z=serch(x-3)+a[x];c[3]++;}
if (c[4]){c[4]--;v=serch(x-4)+a[x];c[4]++;}
f[c[1]][c[2]][c[3]][c[4]]=max(xx,max(y,max(z,v)));
return f[c[1]][c[2]][c[3]][c[4]];
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=m;i++)
{
cin>>b[i];
c[b[i]]++;
}
cout<<serch(n)+a[1];
}