#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int s[1000006];
int c[1000006];
int e[1000006];
long long cost[100006];
vector<vector<long long>> O, E, A;
int N, L, M;
vector<vector<long long>> operator*(const vector<vector<long long>> &A,
                                    const vector<vector<long long>> &B) {
  vector<vector<long long>> C = O;
  for (int k = 0; k < M; k++) {
    for (int i = 0; i < M; i++) {
      for (int j = 0; j < M; j++) {
        C[i][j] += A[i][k] * B[k][j] % mod;
        C[i][j] %= mod;
      }
    }
  }
  return C;
}
vector<long long> mul(const vector<long long> &A,
                      const vector<vector<long long>> &B) {
  vector<long long> ret(M);
  for (int i = 0; i < M; i++) {
    for (int j = 0; j < M; j++) {
      ret[(i + j) % M] += B[0][j] * A[i];
      ret[(i + j) % M] %= mod;
    }
  }
  return ret;
}
void print(vector<vector<long long>> &A) {
  for (int i = 0; i < M; i++) {
    for (int j = 0; j < M; j++) {
      printf("%lld ", A[i][j]);
    }
    puts("");
  }
  puts("");
}
vector<vector<long long>> matpow(vector<vector<long long>> A, int L) {
  vector<vector<long long>> ret = E;
  while (L) {
    if (L & 1) {
      ret = ret * A;
    }
    A = A * A;
    L >>= 1;
  }
  return ret;
}
long long modpow(long long a, long long L) {
  long long ret = 1;
  while (L) {
    if (L & 1) {
      ret = ret * a % mod;
    }
    a = a * a % mod;
    L >>= 1;
  }
  return ret;
}
int main() {
  scanf("%d %d %d", &N, &L, &M);
  A = E = O = vector<vector<long long>>(M, vector<long long>(M));
  for (int i = 0; i < M; i++) {
    E[i][i] = 1;
  }
  for (int i = 1; i <= N; i++) {
    scanf("%d", s + i);
  }
  for (int i = 1; i <= N; i++) {
    scanf("%d", c + i);
    cost[c[i] % M]++;
  }
  for (int i = 1; i <= N; i++) {
    scanf("%d", e + i);
  }
  for (int i = 0; i < M; i++) {
    for (int j = 0; j < M; j++) {
      A[i][(i + j) % M] = cost[j];
    }
  }
  auto B = matpow(A, L - 2);
  vector<long long> base(M), base2(M), ret(M);
  for (int i = 1; i <= N; i++) {
    base[s[i] % M]++;
  }
  base = mul(base, B);
  for (int i = 1; i <= N; i++) {
    base2[(e[i] + c[i]) % M]++;
  }
  for (int i = 0; i < M; i++) {
    for (int j = 0; j < M; j++) {
      ret[(i + j) % M] += base2[j] * base[i];
      ret[(i + j) % M] %= mod;
    }
  }
  printf("%lld\n", ret[0]);
}
