#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7;
int p[11];
vector<int> operator*(const vector<int> &lhs, const vector<int> &rhs) {
  vector<int> ret;
  ret.resize(lhs.size() + rhs.size() - 1, 0);
  for (int i = 0; i < lhs.size(); i++) {
    for (int j = 0; j < rhs.size(); j++) {
      ret[i + j] = (ret[i + j] + lhs[i] * 1LL * rhs[j]) % P;
    }
  }
  return ret;
}
vector<int> operator+(const vector<int> &lhs, const vector<int> &rhs) {
  vector<int> ret;
  ret.resize(max(lhs.size(), rhs.size()), 0);
  for (int i = 0; i < ret.size(); i++)
    ret[i] =
        ((i < lhs.size() ? lhs[i] : 0) + (i < rhs.size() ? rhs[i] : 0)) % P;
  return ret;
}
vector<int> modExp(vector<int> &a, long long m, vector<int> &c) {
  int n = a.size();
  vector<int> ret(n, 0);
  ret[0] = 1;
  if (m == 0) return ret;
  for (int i = 63 - __builtin_clz(m); i >= 0; i--) {
    ret = ret * ret;
    if (m >> i & 1) ret = ret * a;
    for (int i = (int)ret.size() - 1; i >= n; i--)
      if (ret[i]) {
        for (int j = 0; j < n; j++)
          if (c[j]) ret[i - j - 1] = (ret[i - j - 1] + ret[i] * 1LL * c[j]) % P;
      }
    ret.resize(n);
  }
  return ret;
}
int main() {
  int F, B;
  long long N;
  cin >> F >> B >> N;
  for (int i = 1; i <= F; i++) cin >> p[i];
  vector<int> a(250, 0), b(250, 0), c(250, 0);
  for (int i = 1; i <= B; i++) {
    int x;
    cin >> x;
    c[x - 1]++;
  }
  b[0] = 1;
  for (int i = 1; i < 250; i++) {
    for (int j = 0; j < i; j++) b[i] = (b[i] + b[i - j - 1] * 1LL * c[j]) % P;
  }
  a[1] = 1;
  vector<int> d(250, 0);
  for (int i = 1; i <= F; i++) d = d + modExp(a, p[i], c);
  d = modExp(d, N, c);
  int ans = 0;
  for (int i = 0; i < 250; i++) ans = (ans + d[i] * 1LL * b[i]) % P;
  cout << ans << endl;
  return 0;
}
