#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define max 1000
int cost[max];
int weight[max];
int dp[max][31];
int CAP,sum,m;
int func(int i,int w);
int main()
{
int i,j,n,t,p;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d",&m);
for(j=0;j<m;j++)
{
scanf("%d%d",&cost[j],&weight[j]);
}
scanf("%d",&p);
sum=0;
for(j=1;j<=p;j++)
{
memset(dp,-1,sizeof(dp));
scanf("%d",&CAP);
sum=sum+func(0,0);
}
printf("%d\n",sum);
}
return 0;
}
int func(int i,int w)
{
if(i==m)
return 0;
if(dp[i][w]=!-1)
return dp[i][w];
int profit1=0,profit2=0;
if(w+weight[i]<=CAP)
profit1=cost[i]+func(i+1,w+weight[i]);
profit2=func(i+1,w);
if(profit1>profit2)
dp[i][w]=profit1;
else
dp[i][w]=profit2;
return dp[i][w];
}
ICNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxjc3RkaW8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWF4IDEwMDAKaW50IGNvc3RbbWF4XTsKaW50ICB3ZWlnaHRbbWF4XTsKaW50ICBkcFttYXhdWzMxXTsKaW50ICBDQVAsc3VtLG07CmludCBmdW5jKGludCBpLGludCB3KTsKaW50IG1haW4oKQp7CglpbnQgIGksaixuLHQscDsKCXNjYW5mKCIlZCIsJnQpOwoJZm9yKGk9MTtpPD10O2krKykKCXsKCQlzY2FuZigiJWQiLCZtKTsKCQlmb3Ioaj0wO2o8bTtqKyspCgkJewoJCQlzY2FuZigiJWQlZCIsJmNvc3Rbal0sJndlaWdodFtqXSk7CgkJfQoJCXNjYW5mKCIlZCIsJnApOwoJCXN1bT0wOwoJCWZvcihqPTE7ajw9cDtqKyspCgkJewoJCQltZW1zZXQoZHAsLTEsc2l6ZW9mKGRwKSk7CgkJCXNjYW5mKCIlZCIsJkNBUCk7CgkJCXN1bT1zdW0rZnVuYygwLDApOwoJCX0KCQlwcmludGYoIiVkXG4iLHN1bSk7Cgl9CglyZXR1cm4gMDsKfQppbnQgZnVuYyhpbnQgaSxpbnQgdykKewoJaWYoaT09bSkKCQlyZXR1cm4gMDsKCWlmKGRwW2ldW3ddPSEtMSkKCQlyZXR1cm4gZHBbaV1bd107CglpbnQgIHByb2ZpdDE9MCxwcm9maXQyPTA7CglpZih3K3dlaWdodFtpXTw9Q0FQKQoJCXByb2ZpdDE9Y29zdFtpXStmdW5jKGkrMSx3K3dlaWdodFtpXSk7CgkgcHJvZml0Mj1mdW5jKGkrMSx3KTsKCSBpZihwcm9maXQxPnByb2ZpdDIpCgkJIGRwW2ldW3ddPXByb2ZpdDE7CgkgZWxzZQoJCSBkcFtpXVt3XT1wcm9maXQyOwoJIHJldHVybiBkcFtpXVt3XTsKfQ==