#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9 + 10, M = 210, MOD = 1e9 + 7, ML = 25;
long long cnt[M], mo;
struct mat {
  long long a[M][M];
  mat(int x = 0) {
    for (int i = 0; i < M; i++) {
      for (int j = 0; j < M; j++) a[i][j] = 0;
    }
  }
};
mat operator*(mat &x, mat &y) {
  mat z;
  for (int i = 0; i < mo; i++) {
    for (int j = 0; j < mo; j++) {
      for (int k = 0; k < mo; k++) (z.a[i][j] += x.a[i][k] * y.a[k][j]) %= MOD;
    }
  }
  return z;
}
mat po(mat &x, long long y) {
  mat z = x, ret;
  for (int i = 0; i < mo; i++) ret.a[i][i] = 1;
  while (y) {
    if (y & 1) ret = ret * z;
    z = z * z;
    y /= 2;
  }
  return ret;
}
mat ne;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, b, k;
  cin >> n >> b >> k >> mo;
  while (n--) {
    long long x;
    cin >> x;
    cnt[x]++;
  }
  for (int i = 0; i < mo; i++)
    for (int j = 1; j <= 9; j++) ne.a[i][(i * 10 + j) % mo] += cnt[j];
  ne = po(ne, b);
  cout << ne.a[0][k];
}
