#include <bits/stdc++.h>
using namespace std;
int n, l, m;
vector<int> mul(vector<int> x, vector<int> y) {
  vector<int> anss(m);
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < m; j++) {
      anss[(i + j) % m] = (anss[(i + j) % m] + 1LL * x[i] * y[j]) % 1000000007;
    }
  }
  return anss;
}
vector<int> ex(vector<int> v, long long p) {
  if (p == 0) {
    vector<int> temp(m, 0);
    temp[0] = 1;
    return temp;
  }
  vector<int> temp = ex(v, p / 2);
  if (p & 1) return mul(mul(temp, temp), v);
  return mul(temp, temp);
}
void solve() {
  cin >> n >> l >> m;
  vector<int> entry(m), exits(m), v(m);
  for (int i = 0; i < n; ++i) {
    int temp;
    cin >> temp;
    entry[temp % m]++;
  }
  vector<int> alpha(n), beta(n);
  for (int i = 0; i < n; ++i) {
    int temp;
    cin >> temp;
    alpha[i] = temp;
    v[temp % m]++;
  }
  for (int i = 0; i < n; ++i) {
    int temp;
    cin >> temp;
    beta[i] = temp;
    exits[temp % m]++;
  }
  auto p = ex(v, l - 2);
  int ans = 0;
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
      ans = (ans + 1LL * entry[i] *
                       p[(m - i - beta[j] - alpha[j] + 10000 * m * m) % m]) %
            1000000007;
    }
  }
  cout << ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
