#include #include #include #include using namespace std; long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ assert(cnt>0); if(is_neg){ x= -x; } assert(l<=x && x<=r); return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } int T; int n,k; pair arr[200200]; long long round[200200]; int sm_n=0,sm_k=0; int main(){ //freopen("02.txt","r",stdin); //freopen("02o.txt","w",stdout); T=readIntLn(1,100); while(T--){ n=readIntSp(1,100000); k=readIntLn(1,100000); sm_n += n; sm_k += k; assert(sm_n<=100000); assert(sm_k<=100000); long long cnt=0; for(int i=1;i<=n;i++){ if(i==n){ arr[i].first = readIntLn(1,1000000); } else { arr[i].first = readIntSp(1,1000000); } } for(int i=1;i<=n;i++){ if(i==n){ arr[i].second = readIntLn(1,1000000); } else { arr[i].second = readIntSp(1,1000000); } cnt += arr[i].second; } for(int i=1;i<=k;i++){ if(i==k){ round[i] = readIntLn(1,cnt); } else { round[i] = readIntSp(1,cnt); } if(i > 1){ if(!(round[i-1] > round[i])){ i=i; } assert(round[i-1] > round[i]); } } sort(arr+1,arr+1+n); long long l=1,r=cnt; for(int i=1;i<=k;i++){ if(i % 2 ){ l += cnt - round[i]; } else { r -= cnt - round[i]; } cnt = round[i]; } long long sol=0; long long cur_l=0,cur_r=0; for(int i=1;i<=n;i++){ cur_l = cur_r + 1; cur_r = cur_l + arr[i].second - 1; long long ll = max(cur_l,l); long long rr = min(cur_r,r); if(ll<=rr){ sol += arr[i].first * (rr - ll +1); } } cout<