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
****************************************************************/