#include<iostream>
#include<vector>
#include<cstring>
using namespace std;

int a[7];
int b[7];
int m;
long long int dp[7][11][1001];
long long int check(int i,int cnt,int n)
{
  //  cout<<m<<endl;
  //  cout<<i<<" "<<cnt<<" "<<n<<endl;

  if(n==0)
    return 1;
  if(n<0 || i>=m)
    return 0;
  if(dp[i][cnt][n]!=-1)
    return dp[i][cnt][n];
		 
  long long int ans = 0;
  if(b[i]>cnt)
    ans+=check(i,cnt+1,n-a[i]);
  ans+=check(i+1,0,n);
  dp[i][cnt][n]=ans;
  return ans;
  
}

int main()
{
  for(;cin>>m,m;)
    {
      //      card.clear();
      for(int i=0;i<m;i++)
	{
	  cin>>a[i]>>b[i];
	}
      int g;
      cin>>g;
      for(;g--;)
	{
	  int n;
	  cin>>n;
	  memset(dp,-1,sizeof(dp));
	  cout<<check(0,0,n)<<endl;
	}
    }
}