

//b[i]-1小怪血量即容量
//a[i]即价值=花费
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;cin>>T;
while(T--)
{
int n,m;cin>>n>>m;
int a[105],b[105];
int N=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
N=max(N,a[i]);
}//N=最大技能伤害
int M=0;
for(int i=0;i<m;i++)
{
cin>>b[i];
M=max(M,b[i]);
}//M=最大血量
int dp[10005];
memset(dp,0,sizeof(dp));
for(int j=0;j<n;j++) //选项数
for(int k=a[j];k<M;k++) //背包容量 <b[i] 不能打死
dp[k]=max(dp[k],dp[k-a[j]]+a[j]);
//血量为k时的最大伤害
int sum=0;
for(int i=0;i<m;i++) //小怪数量
sum+=dp[b[i]-1]+N; //残血用最大伤害技能打
cout<<sum<<endl;
}
return 0;
}