#include <bits/stdc++.h>
using namespace std;
const int N = 300010, M = 10010, mod = 1e9 + 7, B = 100000000;
int n, a[N], b[N];
char s[M];
int t[M], l, c[N];
int Mod(int a) {
  if (a == 1) return 0;
  long long tot = 0;
  for (int i = l; i >= 1; --i) {
    tot = (tot * B + t[i]);
    t[i] = tot / a, tot = tot % a;
  }
  while (l && !t[l]) l--;
  return tot;
}
void init() {
  scanf("%s", s + 1);
  l = strlen(s + 1);
  reverse(s + 1, s + l + 1);
  int cnt = 0;
  for (int i = 1; i <= l; i += 8) {
    int t0 = 1;
    cnt++;
    for (int j = 0; j < 8; ++j)
      if (i + j <= l) t[cnt] += t0 * (s[i + j] - '0'), t0 *= 10;
  }
  l = cnt;
  for (int i = 1; i <= n; ++i) c[i] = Mod(a[i]);
}
int f[2][N], L[N];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n - 1; ++i) scanf("%d", &a[i]);
  a[n] = 10000000;
  for (int i = 1; i <= n; ++i) scanf("%d", &b[i]);
  init();
  if (l) {
    printf("0\n");
    return 0;
  }
  f[0][0] = 1;
  L[0] = 0;
  for (int i = 1; i <= n; ++i) {
    L[i] = (L[i - 1] + b[i]) / a[i];
    int *g = f[i & 1], *g0 = f[!(i & 1)];
    for (int j = 0; j <= L[i]; ++j) g[j] = 0;
    for (int j0 = 0; j0 <= L[i - 1]; ++j0) {
      int s = (c[i] - j0 % a[i] + a[i]) % a[i], l = (s + j0) / a[i],
          r = l + (b[i] - s) / a[i];
      if (s <= b[i]) (g[l] += g0[j0]) %= mod, (g[r + 1] -= g0[j0]) %= mod;
    }
    for (int j = 1; j <= L[i]; ++j) (g[j] += g[j - 1]) %= mod;
  }
  if (f[n & 1][0] < 0) f[n & 1][0] += mod;
  printf("%d\n", f[n & 1][0]);
  return 0;
}
