var
f:array[0..40,0..40,0..40,0..40]of longint;
a:array[1..350]of longint;
m,n:longint;
aa:array[1..4]of longint;
procedure init;
var
i,tem:longint;
begin
fillchar(aa,sizeof(aa),0);
for i:=1 to 4 do
aa[i]:=0;
readln(n,m);
for i:=1 to n do
read(a[i]);
for i:=1 to m do
begin
read(tem);
inc(aa[tem]);
end;
end;
function max(l1,l2,l3,l4:longint):longint;
var ma,i:longint;
ll:array[1..4]of longint;
begin
ll[1]:=l1;ll[2]:=l2;ll[3]:=l3;ll[4]:=l4;
ma:=0;
for i:=1 to 4 do
if (ll[i]>0) then
begin
dec(ll[i]);
if ma<f[ll[1],ll[2],ll[3],ll[4]] then ma:=f[ll[1],ll[2],ll[3],ll[4]];
inc (ll[i]);
end;
max:=ma;
end;
procedure doit;
var
l1,l2,l3,l4:longint;
begin
f[0,0,0,0]:=a[1];
for l1:=0 to aa[1]do
for l2:=0 to aa[2]do
for l3:=0 to aa[3]do
for l4:=0 to aa[4]do
if a[1+l1+l2*2+l3*3+l4*4]>0 then f[l1,l2,l3,l4]:=max(l1,l2,l3,l4)+a[1+l1+l2*2+l3*3+l4*4];
end;
procedure print;
begin
writeln(f[aa[1],aa[2],aa[3],aa[4]]);
end;
begin
init;
doit;
print;
end.
/**************************************************************
Problem: 2297
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/