#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

int main(){

	int m;
	while(cin>>m&&m!=0){
		int cnts[101];
		fill(cnts,cnts+101,0);
		// dp[i][j]ツづ絞ツ氾板姪堋づ個青板篠堋づーツづつつゥツづづツづーツづつつュツづェツづゥツ古つ青板づーツ表ツつキ
		int dp[101][2001];
		for(int i = 0; i < 100; i++){
			for(int j = 0; j < 1001; j++){
				dp[i][j]=0;
			}
		}
		dp[0][0]=1;
		for(int i = 0; i < m; i++){
			int a,b;
			cin>>a>>b;
			cnts[a]+=b;
		}
		for(int i = 1; i <= 100; i++){
			if(cnts[i]!=0){
				for(int j = 0; j <= 1000; j++){
					for(int k = 0; k <= cnts[i]; k++){
						if(j-k*i>=0){
							dp[i][j]+=dp[i-1][j-k*i];
						}
						else
							break;
					}
				}
			}
			else{
				for(int j = 0; j <= 1000; j++){
					dp[i][j]=dp[i-1][j];
				}
			}
		}
		int g;
		cin>>g;
		for(int i = 0; i < g; i++){
			int n;
			cin>>n;
			cout<<dp[100][n]<<endl;
		}
	}

	return 0;
}