#include <bits/stdc++.h>
using namespace std;
const int N = 1100, MOD = 1e9 + 7;
long long nfac[N], fac[N], dp[N][N];
int sum[N], a[N], b[N];
long long Mul(long long x, long long y) { return x * y % MOD; }
long long Pow(long long x, long long i, long long res = 1) {
  for (; i; i >>= 1) {
    if (i & 1) res = Mul(x, res);
    x = Mul(x, x);
  }
  return res % MOD;
}
void makefac() {
  fac[0] = 1;
  nfac[0] = 1;
  for (int i = 1; i <= N - 20; i++)
    fac[i] = Mul(fac[i - 1], i), nfac[i] = Pow(fac[i], MOD - 2);
}
long long comb(long long n, long long r) {
  if (n - r < 0 || r < 0 || n < 0) return 0;
  return Mul(fac[n], Mul(nfac[n - r], nfac[r]));
}
int main() {
  int n;
  makefac();
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", a + i), sum[i] = sum[i - 1] + a[i];
  for (int i = 1; i <= n; i++) scanf("%d", b + i);
  dp[0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= sum[i]; j++)
      for (int k = 0; k <= min(b[i], j); k++)
        (dp[i][j] += Mul(dp[i - 1][j - k], comb(sum[i] - (j - k), k))) %= MOD;
  long long ans = dp[n][sum[n]];
  ans = Mul(ans, fac[sum[n]]);
  for (int i = 1; i <= n; i++) ans = Mul(ans, nfac[a[i]]);
  printf("%lld\n", ans);
  return 0;
}
