#include <bits/stdc++.h>
using namespace std;
long long n = 0, x[1010], y[1010], f[1010], m, d[1010][1010], c[1010][1010];
long long bin(long long x, long long a) {
  long long y = 1;
  while (a) {
    if (a & 1) y *= x, y %= 1000000007ll;
    x *= x, x %= 1000000007ll;
    a >>= 1;
  }
  return y;
}
void pre(void) {
  f[0] = 1;
  for (int i = 1; i < 1010; ++i) f[i] = (i * f[i - 1]) % 1000000007ll;
  for (int i = 0; i < 1010; ++i) c[i][0] = 1;
  for (int i = 1; i < 1010; ++i)
    for (int j = 1; j <= i; ++j) {
      c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
      if (c[i][j] >= 1000000007ll) c[i][j] -= 1000000007ll;
    }
}
void read(void) {
  cin >> m;
  for (int i = 1; i <= m; ++i) {
    cin >> x[i];
    n += x[i];
  }
  for (int i = 1; i <= m; ++i) {
    cin >> y[i];
  }
}
void din(void) {
  d[0][0] = 1;
  for (int i = 0; i <= m; ++i)
    for (int s = 0; s <= n; ++s)
      for (int j = 0; j <= s + x[i] && j <= y[i]; ++j)
        d[i + 1][s + x[i] - j] =
            (d[i + 1][s + x[i] - j] + d[i][s] * c[s + x[i]][j]) % 1000000007ll;
  long long ans = d[m + 1][0];
  ans = (ans * f[n]) % 1000000007ll;
  for (int i = 1; i <= n; ++i)
    ans = (ans * bin(f[x[i]], 1000000007ll - 2)) % 1000000007ll;
  cout << ans << "\n";
}
int main() {
  pre();
  read();
  din();
  return 0;
}
