using namespace std;
#include<bits/stdc++.h>
#define ll long long
const int N=350;const int D=45;const int M=120;
ll read(){
ll summ=0;ll f=1;char ch;
ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
summ=summ*10+ch-'0';
ch=getchar();
}
return f*summ;
}
ll bushu[10];
ll qi[N];
ll f[D][D][D][D];
ll n,m;
ll aaa,bbb,ccc,ddd;
void dfs(ll aa,ll bb,ll cc,ll dd){
if(aa==aaa & bb==bbb & cc==ccc & dd==ddd){
return;
}
if(aa>aaa||bb>bbb||cc>ccc||dd>ddd){
return;
}
if(aa<aaa){
f[aa+1][bb][cc][dd]=max(f[aa+1][bb][cc][dd],f[aa][bb][cc][dd]+qi[aa+2*bb+3*cc+4*dd+1]);
dfs(aa+1,bb,cc,dd);
}
if(bb<bbb){
f[aa][bb+1][cc][dd]=max(f[aa][bb+1][cc][dd],f[aa][bb][cc][dd]+qi[aa+2*bb+3*cc+4*dd+2]);
dfs(aa,bb+1,cc,dd);
}
if(cc<ccc){
f[aa][bb][cc+1][dd]=max(f[aa][bb][cc+1][dd],f[aa][bb][cc][dd]+qi[aa+2*bb+3*cc+4*dd+1]);
dfs(aa,bb,cc+1,dd);
}
if(dd<ddd){
f[aa][bb][cc][dd+1]=max(f[aa][bb+1][cc][dd+1],f[aa][bb][cc][dd]+qi[aa+2*bb+3*cc+4*dd+2]);
dfs(aa,bb,cc,dd+1);
}
}
int main(){
n=read();m=read();
for(int i=1;i<=n;i++){
qi[i]=read();
}
for(int i=1;i<=m;i++){
ll t=read();
bushu[t]++;
}
aaa=bushu[1];bbb=bushu[2];ccc=bushu[3];
ddd=bushu[4];
dfs(0,0,0,0);
cout<<f[aaa][bbb][ccc][ddd];
return 0;
}