//所有头文件:
//1.首先是最方便的万能头文件,顾名思义,可以将其理解为父亲头文件(除了本篇第14个头文件)都包含)
//(虽然方便了懒人,但是缺点也很明显--这一头文件很占用内存):
#include<bits/stdc++.h>
//2.接着也是比较常用的,作用于数据流输入输出 cin>>和cout<<:
#include<iostream>
//3.然后是各种算法的头文件(例如sort函数等):
#include<algorithm>
//4.关于数学函数的头文件(例如max( ),min( ),abs( )等)(从C语言中的math.h继承而来):
#include<cmath>
//5.string字符串头文件:
#include<cstring>
//6.接着是C语言的头文件:
#include<cstdio>
//7.普通队列(只能一边进一边出)(先进先出)的头文件:
#include<queue>
//8.双向队列(两边都可以进出)(先进先出)的头文件:
#include<deque>
//9.栈(先进后出,后进先出)的头文件:
#include<stack>
//10.列表的头文件:
#include<list>
//11.动态数组(不需知道该数组的数量)的头文件:
#include<vector>
//12.图的头文件:
#include<map>
//13.集合(内部自动有序且不含重复元素)的头文件:
#include<set>
//14.控制电脑或小黑框头文件(不包含在万能头件):
#include<windows.h>
#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[45][45][45][45],a[355],mp[5];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1;i<=m;++i)
{
int x;
cin>>x;
mp[x]++;
}
for(int i=0;i<=mp[1];++i)
{
for(int j=0;j<=mp[2];++j)
{
for(int k=0;k<=mp[3];++k)
{
for(int l=0;l<=mp[4];++l)
{
dp[i][j][k][l]=max({i==0?0:dp[i-1][j][k][l],j==0?0:dp[i][j-1][k][l],k==0?0:dp[i][j][k-1][l],l==0?0:dp[i][j][k][l-1]})+a[1+i+2*k+3*j+4*l];
}
}
}
}
cout<<dp[mp[1]][mp[2]][mp[3]][mp[4]];
return 0;
}