#include<iostream> using namespace std; int f[41][41][41][41],a[400],num[5]; int main() { int n,m,x; cin>>n>>m; for (int i=1;i<=n;i++) cin>>a[i]; for (int i=1;i<=m;i++) {cin>>x;num[x]++;} f[0][0][0][0]=a[1]; for (int x1=0;x1<=num[1];x1++) for (int x2=0;x2<=num[2];x2++) for (int x3=0;x3<=num[3];x3++) for (int x4=0;x4<=num[4];x4++) { int b; b=1+x1+2*x2+3*x3+4*x4; if (x1>0) f[x1][x2][x3][x4]=max(f[x1][x2][x3][x4],f[x1-1][x2][x3][x4]+a[b]); if (x2>0) f[x1][x2][x3][x4]=max(f[x1][x2][x3][x4],f[x1][x2-1][x3][x4]+a[b]); if (x3>0) f[x1][x2][x3][x4]=max(f[x1][x2][x3][x4],f[x1][x2][x3-1][x4]+a[b]); if (x4>0) f[x1][x2][x3][x4]=max(f[x1][x2][x3][x4],f[x1][x2][x3][x4-1]+a[b]); } cout<<f[num[1]][num[2]][num[3]][num[4]]<<endl; return 0; } /************************************************************** Problem: 2297 User: admin Language: C++ Result: Accepted Time:114 ms Memory:13112 kb ****************************************************************/