#include <bits/stdc++.h>
using namespace std;
long long gi() {
  char cc = getchar();
  long long cn = 0, flus = 1;
  while (cc < '0' || cc > '9') {
    if (cc == '-') flus = -flus;
    cc = getchar();
  }
  while (cc >= '0' && cc <= '9') cn = cn * 10 + cc - '0', cc = getchar();
  return cn * flus;
}
const long long P = 1e9 + 7;
const long long N = 505;
long long fpow(long long x, long long k) {
  long long ans = 1, base = x;
  while (k) {
    if (k & 1) ans = 1ll * ans * base % P;
    base = 1ll * base * base % P, k >>= 1;
  }
  return ans;
}
long long n, m, lim, D, L, A[N], B[N], H[N], F[N], Q[N];
void inc(long long &x, long long y) { ((x += y) >= P) && (x -= P); }
void dec(long long &x, long long y) { ((x -= y) < 0) && (x += P); }
long long fp[N], ans[N], base[N];
void Mul(long long *a, long long *b) {
  for (long long i = (0); i <= (lim); ++i) fp[i] = 0;
  for (long long i = (0); i <= (D); ++i)
    for (long long j = (0); j <= (D); ++j) inc(fp[i + j], a[i] * b[j] % P);
  for (long long i = (0); i <= (lim); ++i) a[i] = fp[i];
}
void Mod(long long *a) {
  for (long long i = lim; i >= D; --i)
    for (long long j = (D); j >= (0); --j) dec(a[i - j], a[i] * Q[D - j] % P);
}
void fpow(long long *a, long long k) {
  for (long long j = (0); j <= (lim); ++j) ans[j] = base[j] = 0;
  for (long long j = (0); j <= (lim); ++j) base[j] = a[j];
  ans[0] = 1;
  while (k) {
    if (k & 1) Mul(ans, base), Mod(ans);
    Mul(base, base), Mod(base), k >>= 1;
  }
  for (long long i = (0); i <= (D); ++i) a[i] = ans[i];
}
signed main() {
  n = gi(), m = gi(), L = gi();
  for (long long i = (1); i <= (n); ++i) A[i] = gi();
  for (long long i = (1); i <= (m); ++i) B[i] = gi(), D = max(D, B[i]);
  Q[D] = 1;
  for (long long i = (1); i <= (m); ++i) dec(Q[D - B[i]], 1);
  lim = 2 * D;
  for (long long i = (1); i <= (n); ++i) {
    for (long long j = (0); j <= (lim); ++j) F[j] = 0;
    F[1] = 1, fpow(F, A[i]);
    for (long long j = (0); j <= (D); ++j) inc(H[j], F[j]);
  }
  fpow(H, L);
  for (long long i = (D); i >= (0); --i)
    for (long long j = (1); j <= (m); ++j)
      if (i >= B[j]) inc(H[i - B[j]], H[i]);
  cout << H[0] << endl;
  return 0;
}
