#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int N = 1e6 + 5;
int K;
long long cnt[105];
vector<vector<long long>> iden;
long long mm[N];
vector<vector<long long>> mul(vector<vector<long long>> A,
                              vector<vector<long long>> B) {
  vector<vector<long long>> C(K + 1, vector<long long>(K + 1));
  for (int i = int(0); i < int(K); ++i)
    for (int j = int(0); j < int(K); ++j)
      for (int k = int(0); k < int(K); ++k)
        C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % mod;
  return C;
}
vector<vector<long long>> binpow(vector<vector<long long>> A, long long p) {
  if (p == 0) return iden;
  if (p == 1) return A;
  vector<vector<long long>> ret = binpow(A, p >> 1);
  if (p & 1) return mul(ret, mul(ret, A));
  return mul(ret, ret);
}
vector<long long> mul2(vector<vector<long long>> A, vector<long long> v) {
  vector<long long> ret(K + 1);
  for (int i = int(0); i < int(K); ++i)
    for (int j = int(0); j < int(K); ++j)
      ret[i] = (ret[i] + v[j] * A[i][j]) % mod;
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long n, p;
  cin >> n >> p >> K;
  vector<long long> ini(K + 1);
  for (int i = int(0); i < int(K + 1); ++i) {
    vector<long long> uwu;
    for (int j = int(0); j < int(K + 1); ++j) uwu.push_back((i == j));
    iden.push_back(uwu);
  }
  iden[K][K] = 0;
  for (int i = int(0); i < int(n); ++i) {
    int k;
    cin >> k;
    ini[k % K]++;
  }
  for (int i = int(0); i < int(n); ++i) {
    int k;
    cin >> k;
    cnt[k % K]++;
    mm[i] = k;
  }
  vector<vector<long long>> base(K + 1, vector<long long>(K + 1));
  for (int i = int(0); i < int(K); ++i)
    for (int j = int(0); j < int(K); ++j) {
      int val = (i - j + K) % K;
      base[i][j] = cnt[val];
    }
  base = binpow(base, p - 2);
  vector<long long> vec = mul2(base, ini);
  long long ans = 0;
  for (int i = int(0); i < int(n); ++i) {
    int k;
    cin >> k;
    mm[i] = (mm[i] + k) % K;
    ans = (ans + vec[(K - mm[i]) % K]) % mod;
  }
  cout << ans << endl;
  return 0;
}
