#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
#define int long long
const int N = 105, INF = 0x3f3f3f3f, P = 1000000007;
std::map<int, int> ans;
int n, prod, sb[N], b[N], c[N], f[N][N*N], x, q;
int solve(int f1) {
	memset(f, 0, sizeof f);
	f[0][0] = 1;
    for(int i = 1; i <= 100*n; i++) f[0][i] = (f[0][i] + f[0][i-1]) % P;
    int l = 0, r = 0;
    for (int i = 1; i <= n; i++) {
        l += b[i] + f1, r += c[i];
        for (int j = std::max(l, 0ll); j <= r; j++) { 
        	int t = j-std::min(c[i], j)-1;
        	f[i][j] = (f[i-1][j] - ((t >= 0) ? f[i-1][t] : 0) + P) % P;
        }
        for (int j = 1; j <= 100*n; j++) 
        	f[i][j] = (f[i][j] + f[i][j-1]) % P;
    }
    return f[n][r] - (std::max(l, 0ll) ? f[n][std::max(l, 0ll)-1] : 0);
}
signed main() {
	scanf("%lld", &n);
	int prod = 1;
	for (int i = 1; i <= n; i++) 
		scanf("%lld", &c[i]), prod = prod * (c[i] + 1) % P;
	for (int i = 1; i < n; i++) scanf("%lld", &b[i]);
	for (int i = 1; i <= n; i++)
		for (int j = 1; j < i; j++)
			sb[i] += (i-j) * b[j];
	for (int i = n; i > 1; i--) b[i] = b[i-1]; b[1] = 0;
	for (int i = 2; i <= n; i++) b[i] += b[i-1];
	int lb = 0, rb = INF, m = -INF;
	for (int i = 1; i <= n; i++) m = std::max(m, c[i]);
	for (int i = 1; i <= n; i++)
		lb = std::min(lb, -((sb[i]-1) / i + 1)), 
		rb = std::min(rb, (n*m - sb[i]-1) / i + 1);
	for (int i = lb; i <= rb; i++) ans[i] = solve(i);
	scanf("%lld", &q);
	while (q--) {
		scanf("%lld", &x);
		if(x < lb) printf("%lld\n", prod);
		else if(x > rb) puts("0");
		else printf("%lld\n", ans[x]);
	}
	return 0;
}