#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9+7;

vector<int> solve(const vector<int>& c, const vector<int>& b, const vector<int>& x) {
  int n = c.size();
  int q = x.size();
  vector<int> cb(n);
  cb[0] = 0;
  for (int i = 0; i < n-1; ++i) {
    cb[i+1] = cb[i] + b[i];
  }
  vector<int> d(n);
  d[0] = 0;
  for (int i = 0; i < n-1; ++i) {
    d[i+1] = d[i] + cb[i+1];
  }
  vector<int> cc(n+1);
  cc[0] = 0;
  for (int i = 0; i < n; ++i) {
    cc[i+1] = cc[i] + c[i];
  }
  int maxsum = cc[n];
  vector<int> ans(q);
  for (int qi = 0; qi < q; ++qi) {
    vector<vector<int>> dp(n+1, vector<int>(maxsum+1, 0));
    fill(dp[n].begin(), dp[n].end(), 1);
    for (int i = n-1; i >= 0; --i) {
      for (int j = 0; j <= cc[i]; ++j) {
	for (int k = max(0, d[i] + (i+1)*x[qi] - j); k <= c[i]; ++k) {
	  assert((j+k) <= maxsum);
	  dp[i][j] += dp[i+1][j+k];
	  if (dp[i][j] >= MOD) dp[i][j] -= MOD;
	}
      }
    }
    ans[qi] = dp[0][0];
  }
  return ans;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  vector<int> c(n);
  for (int i = 0; i < n; ++i) {
    cin >> c[i];
  }
  vector<int> b(n-1);
  for (int i = 0; i < n-1; ++i) {
    cin >> b[i];
  }
  int q;
  cin >> q;
  vector<int> x(q);
  for (int i = 0; i < q; ++i) {
    cin >> x[i];
  }
  vector<int> solush = solve(c, b, x);
  for (int i = 0; i < q; ++i) {
    if (i > 0) cout << " ";
    cout << solush[i];
  }
  cout << endl;
}
