#include <bits/stdc++.h>
using namespace std;
const long long INF = 8 * 1e18;
const int MOD = 1e9 + 7;
int a, b, c, d, m, n, p, k, x;
long long res;
int Amm[10];
long long DP[200][200];
long long T[200][200];
long long Temp[200][200];
void Power(long long);
void MultiplyDP();
void MultiplyT();
int main() {
  scanf("%d %d %d %d", &n, &b, &k, &x);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a);
    Amm[a % x]++;
  }
  for (int i = 0; i < x; i++) {
    DP[i][i] = 1;
    for (int j = 0; j < 10; j++) {
      T[i][(i * 10 + j) % x] += Amm[j];
    }
  }
  Power(b);
  printf("%lld\n", DP[0][k]);
}
void Power(long long pw) {
  do {
    if (pw & 1) {
      MultiplyDP();
    }
    MultiplyT();
  } while (pw >>= 1);
}
void MultiplyT() {
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < x; j++) {
      Temp[i][j] = 0;
      for (int l = 0; l < x; l++) {
        Temp[i][j] = (Temp[i][j] + T[i][l] * T[l][j]) % MOD;
      }
    }
  }
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < x; j++) {
      T[i][j] = Temp[i][j];
    }
  }
}
void MultiplyDP() {
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < x; j++) {
      Temp[i][j] = 0;
      for (int l = 0; l < x; l++) {
        Temp[i][j] = (Temp[i][j] + DP[i][l] * T[l][j]) % MOD;
      }
    }
  }
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < x; j++) {
      DP[i][j] = Temp[i][j];
    }
  }
}
