#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 130;
const long long MODD = 1000000007;
long long A[MAX_N][MAX_N], B[MAX_N][MAX_N], res[MAX_N][MAX_N];
void mult(int n, const long long A[MAX_N][MAX_N],
          const long long B[MAX_N][MAX_N], long long C[MAX_N][MAX_N]) {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      C[i][j] = 0;
      for (int k = 0; k < n; k++)
        C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MODD;
    }
}
void copy(int n, const long long A[MAX_N][MAX_N], long long B[MAX_N][MAX_N]) {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) B[i][j] = A[i][j];
}
void do_case() {
  int n, b, k, x;
  cin >> n >> b >> k >> x;
  long long ctr[10] = {0};
  int v;
  for (int i = 0; i < n; i++) {
    cin >> v;
    ctr[v]++;
  }
  for (int i = 0; i < x; i++)
    for (int j = 0; j < 10; j++) A[(i * 10 + j) % x][i] += ctr[j];
  for (int i = 0; i < x; i++)
    for (int j = 0; j < x; j++) A[i][j] %= MODD;
  for (int i = 0; i < x; i++)
    for (int j = 0; j < x; j++) res[i][j] = (i == j);
  while (b) {
    if (b % 2) {
      mult(x, res, A, B);
      copy(x, B, res);
    }
    mult(x, A, A, B);
    copy(x, B, A);
    b /= 2;
  }
  cout << res[k][0] << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  do_case();
  return 0;
}
