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