#include <bits/stdc++.h>
using namespace std;
const int N = 105;
const int MOD = (int)1e9 + 7;
struct mi {
  typedef decay<decltype(MOD)>::type T;
  T v;
  explicit operator T() const { return v; }
  mi() { v = 0; }
  mi(long long _v) {
    v = (-MOD < _v && _v < MOD) ? _v : _v % MOD;
    if (v < 0) v += MOD;
  }
  friend bool operator==(const mi& a, const mi& b) { return a.v == b.v; }
  friend bool operator!=(const mi& a, const mi& b) { return !(a == b); }
  friend bool operator<(const mi& a, const mi& b) { return a.v < b.v; }
  mi& operator+=(const mi& m) {
    if ((v += m.v) >= MOD) v -= MOD;
    return *this;
  }
  mi& operator-=(const mi& m) {
    if ((v -= m.v) < 0) v += MOD;
    return *this;
  }
  mi& operator*=(const mi& m) {
    v = (long long)v * m.v % MOD;
    return *this;
  }
  mi& operator/=(const mi& m) { return (*this) *= inv(m); }
  friend mi pow(mi a, long long p) {
    mi ans = 1;
    assert(p >= 0);
    for (; p; p /= 2, a *= a)
      if (p & 1) ans *= a;
    return ans;
  }
  friend mi inv(const mi& a) {
    assert(a.v != 0);
    return pow(a, MOD - 2);
  }
  mi operator-() const { return mi(-v); }
  mi& operator++() { return *this += 1; }
  mi& operator--() { return *this -= 1; }
  friend mi operator+(mi a, const mi& b) { return a += b; }
  friend mi operator-(mi a, const mi& b) { return a -= b; }
  friend mi operator*(mi a, const mi& b) { return a *= b; }
  friend mi operator/(mi a, const mi& b) { return a /= b; }
};
int n;
int c[N], b[N];
int lb[N], psum[N];
mi dp[N][N * N];
mt19937 rng(2333);
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  for (int i = 1; i < (n + 1); ++i) cin >> c[i];
  for (int i = 1; i < (n); ++i) cin >> b[i];
  int q;
  cin >> q;
  int x;
  cin >> x;
  lb[1] = psum[1] = x;
  for (int i = 2; i < (n + 1); ++i) {
    lb[i] = lb[i - 1] + b[i - 1];
    psum[i] = lb[i] + psum[i - 1];
  }
  dp[0][0] = 1;
  int maxs = 100 * n;
  for (int i = 1; i < (n + 1); ++i) {
    for (int s = psum[i]; s < (maxs + 1); ++s) {
      for (int cur = 0; cur < (c[i] + 1); ++cur) {
        dp[i][s] += dp[i - 1][s - cur];
      }
    }
  }
  mi res = 0;
  for (int i = 0; i < (maxs + 1); ++i) res += dp[n][i];
  cout << int(res) << endl;
}
