#include <bits/stdc++.h>
using namespace std;

typedef long long Int;
typedef pair<int,int> PII;
typedef vector<int> VInt;
 
#define FOR(i, a, b) for(i = (a); i < (b); ++i)
#define RFOR(i, a, b) for(i = (a) - 1; i >= (b); --i)
#define EACH(it, a) for(auto it = (a).begin(); it != (a).end(); ++it)
#define CLEAR(a, b) memset(a, b, sizeof(a))
#define SIZE(a) int((a).size())
#define ALL(a) (a).begin(),(a).end()
#define MP make_pair

#define MOD (int(1e9+7))
#define MAX (10 << 10)

int C[128];
int B[128];
int S[128];
int L[128];
int R[128];
Int A[2][MAX];
Int Z[MAX];

Int f(int n, int x)
{
	int i, j;
	int sr = 0;
	int sl = 0;
	Int all = 1;
	bool fail = false;
	FOR(i, 0, n) 
	{
		int a = x + S[i];
		L[i] = 0 - a;
		R[i] = C[i] - a;
		sl += L[i];
		sr += R[i];
		all = all*(R[i] - L[i] + 1) % MOD;
		if(sr < 0) return 0;
		if(sl < 0) fail = true;
	}

	if(!fail) return all;

	sl = max(0, L[0]);
	sr = R[0];
	int len = sr - sl + 1;
	FOR(i, 0, len) A[1][i] = 1;
	FOR(i, 1, n)
	{
		int prev = i & 1;
		int next = prev ^ 1;
		Z[0] = 0;
		FOR(j, 0, len) Z[j + 1] = Z[j] + A[prev][j];

		int ll = max(0, sl + L[i]);
		int rr = sr + R[i];
		int len2 = rr - ll + 1;
		FOR(j, 0, len2)
		{
			int from = max(0, ll + j - R[i] - sl);
			int to = min(len, ll + j - L[i] + 1 - sl);
			A[next][j] = (Z[to] - Z[from]) % MOD;
		}
		sl = ll;
		sr = rr;
		len = len2;
	}

	Int res = 0;
	FOR(i, 0, len) res = (res + A[n & 1][i]) % MOD;
	return res;
}

void SolveTest(int test)
{
	int n;
	cin >> n;
	int i;
	FOR(i, 0, n) 
		cin >> C[i];
	FOR(i, 0, n - 1)
		cin >> B[i];
	S[0] = 0;
	FOR(i, 1, n) S[i] = S[i - 1] + B[i - 1];
	int q;
	cin >> q;
	vector<PII> qq(q);
	FOR(i, 0, q) 
	{
		cin >> qq[i].first;
		qq[i].second = i;
	}

	vector<long> res(q);
	sort(ALL(qq));
	FOR(i, 0, q)
	{
		if(i != 0 && qq[i].first == qq[i - 1].first)
			res[qq[i].second] = res[qq[i - 1].second];
		else
			res[qq[i].second] = f(n, qq[i].first);
	}

	FOR(i, 0, q) cout << res[i] << endl;
}

int main()
{
	int T, t;
	T = 1;
//	cin >> T;
	FOR(t, 0, T) SolveTest(t);
	return 0;
}