#include <bits/stdc++.h>
using namespace std;
int f[110][1100], a[110], b[110], s[110], jc[1100], ny[1100], ans, n;
int qmod(int a, int b) {
  int t = 1;
  while (b) {
    if (b % 2) t = ((long long)t * (long long)a) % 1000000007;
    b /= 2;
    a = ((long long)a * (long long)a) % 1000000007;
  }
  return t;
}
int c(int x, int y) {
  return (((long long)jc[x] * (long long)ny[y]) % 1000000007 *
          (long long)ny[x - y]) %
         1000000007;
}
int main() {
  jc[0] = ny[0] = 1;
  for (int i = 1; i < 1100; i++) {
    jc[i] = ((long long)jc[i - 1] * i) % 1000000007;
    ny[i] = qmod(jc[i], 1000000007 - 2);
  }
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    s[i] = s[i - 1] + a[i];
  }
  for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
  f[0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= s[i]; j++)
      for (int k = 0; k <= min(j, b[i]); k++)
        f[i][j] = ((long long)f[i][j] +
                   (long long)f[i - 1][j - k] * (long long)c(s[i] - j + k, k)) %
                  1000000007;
  ans = jc[s[n]];
  for (int i = 1; i <= n; i++)
    ans = ((long long)ans * (long long)ny[a[i]]) % 1000000007;
  ans = ((long long)ans * (long long)f[n][s[n]]) % 1000000007;
  printf("%d\n", ans);
  return 0;
}
