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

int main(){
	int m;
	while( cin >> m , m ){
		vector<int> a(m), b(m);
		for(int i=0 ; i < m ; i++ ){
			cin >> a[i] >> b[i];
		}
		
		// dp[i][j] := a[0..i] までのカードを使ったとき,和が j になる組合せ数
		int dp[10][1001] = {0};
		dp[0][0] = 1;
		for(int i=0 ; i < a.size() ; i++ ){
			for(int j=0 ; j < 1001 ; j++ ){
				for(int k=0 ; k <= b[i] ; k++ ){
					// k := a[i] のカードを使う枚数
					if( j+a[i]*k < 1001 ){
						dp[i+1][j+a[i]*k] += dp[i][j];
					}
				}
			}
		}
		
		int g;
		cin >> g;
		for(int i=0 ; i < g ; i++ ){
			int n;
			cin >> n;
			cout << dp[m][n] << endl;
		}
	}
}