#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAX_COEF = 505;
long long pang(long long x, long long y) {
  if (y == 0) return 1;
  if (y == 1) return x;
  long long res = pang(x, y / 2);
  res = (res * res) % MOD;
  if (y & 1) res = (res * x) % MOD;
  return res;
}
long long inverse(long long x) { return pang(x, MOD - 2); }
struct polynomial {
  int deg;
  long long coeff[MAX_COEF];
  polynomial() {
    deg = 0;
    memset(coeff, 0, sizeof coeff);
  }
  void print() {
    for (int i = 0; i <= deg; i++) {
      if (i > 0 && coeff[i] == 0) continue;
      printf("%lld", coeff[i]);
      if (i != 0) printf("x");
      if (i > 1) printf("^%d", i);
      if (i != deg) printf(" + ");
    }
    printf("\n");
  }
};
struct operation {
  polynomial add(polynomial a, polynomial b) {
    polynomial res;
    res.deg = max(a.deg, b.deg);
    for (int i = res.deg; i >= 0; i--) {
      if (b.deg >= i) res.coeff[i] += b.coeff[i];
      if (a.deg >= i) res.coeff[i] += a.coeff[i];
      res.coeff[i] %= MOD;
    }
    while (res.deg > 0 && res.coeff[res.deg] == 0) res.deg--;
    return res;
  }
  polynomial mult(polynomial a, polynomial b) {
    polynomial res;
    res.deg = a.deg + b.deg;
    for (int i = 0; i <= a.deg; i++) {
      for (int j = 0; j <= b.deg; j++) {
        res.coeff[i + j] = (res.coeff[i + j] + a.coeff[i] * b.coeff[j]) % MOD;
      }
    }
    return res;
  }
  polynomial div(polynomial a, polynomial b) {
    polynomial res;
    res.deg = a.deg - b.deg;
    for (int i = res.deg; i >= 0; i--) {
      res.coeff[i] = (a.coeff[i + b.deg] * inverse(b.coeff[b.deg])) % MOD;
      for (int j = b.deg; j >= 0; j--) {
        a.coeff[i + j] = (a.coeff[i + j] - res.coeff[i] * b.coeff[j]) % MOD;
        a.coeff[i + j] = (a.coeff[i + j] + MOD) % MOD;
      }
    }
    return res;
  }
  polynomial mod(polynomial a, polynomial b) {
    polynomial res;
    res.deg = a.deg - b.deg;
    for (int i = res.deg; i >= 0; i--) {
      res.coeff[i] = (a.coeff[i + b.deg] * inverse(b.coeff[b.deg])) % MOD;
      for (int j = b.deg; j >= 0; j--) {
        a.coeff[i + j] = (a.coeff[i + j] - res.coeff[i] * b.coeff[j]) % MOD;
        a.coeff[i + j] = (a.coeff[i + j] + MOD) % MOD;
      }
    }
    while (a.deg > 0 && a.coeff[a.deg] == 0) a.deg--;
    return a;
  }
};
operation op;
polynomial one;
polynomial modulo;
polynomial power(polynomial a, long long p) {
  polynomial ret;
  ret.coeff[0] = 1;
  while (p) {
    if (p & 1) {
      ret = op.mult(ret, a);
      ret = op.mod(ret, modulo);
    }
    a = op.mult(a, a);
    a = op.mod(a, modulo);
    p >>= 1;
  }
  return ret;
}
long long f, b, n;
long long AF[105], AB[105];
int main() {
  scanf("%lld %lld %lld", &f, &b, &n);
  for (int i = 1; i <= f; i++) scanf("%lld", &AF[i]);
  for (int i = 1; i <= b; i++) scanf("%lld", &AB[i]);
  modulo.coeff[0] = 1;
  long long maks = -1;
  for (int i = 1; i <= b; i++) {
    maks = max(maks, AB[i]);
    one.deg = maks - 1;
    one.coeff[AB[i] - 1] += 1;
    modulo.deg = maks;
    modulo.coeff[AB[i]] -= 1;
  }
  polynomial P;
  P.deg = maks;
  for (int i = 1; i <= f; i++) {
    P = op.add(P, power(one, AF[i]));
    P = op.mod(P, modulo);
  }
  P = power(P, n);
  P = op.mod(P, modulo);
  printf("%lld\n", P.coeff[0]);
  return 0;
}
