#include <bits/stdc++.h>
using namespace std;
const int MAXX = 105, MOD = 1e9 + 7;
typedef long long Mat[MAXX][MAXX];
Mat A, B, C;
long long Base[MAXX], mark[MAXX], n, k, x;
long long Fmods[MAXX];
long long b;
void fillB() {
  for (int i = 0; i < 105; i++) B[i][i] = 1;
  return;
}
int sum(int a, int b) {
  long long c = a + b;
  if (c >= MOD) c -= MOD;
  return c;
}
void mul(Mat A, Mat B) {
  for (int i = 0; i < x; i++)
    for (int j = 0; j < x; j++) C[i][j] = 0;
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < x; j++) {
      for (int k = 0; k < x; k++) {
        C[i][j] = sum(C[i][j], (A[i][k] * B[k][j]) % MOD);
      }
    }
  }
  return;
}
int calcAns() {
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < x; j++) {
      Fmods[i] = sum(Fmods[i], Base[j] * B[i][j] % MOD);
    }
  }
  return Fmods[k];
}
void fillBase() {
  for (int i = 0; i < x; i++) Base[i] = mark[i];
}
void matPower(long long poww) {
  poww--;
  for (; poww; poww /= 2) {
    if (poww % 2 == 1) {
      mul(A, B);
      swap(B, C);
    }
    mul(A, A);
    swap(A, C);
  }
  return;
}
int c[50000];
int main() {
  cin >> n >> b >> k >> x;
  for (int i = 0; i < n; i++) {
    cin >> c[i];
    mark[c[i] % x]++;
  }
  fillBase();
  fillB();
  for (int j = 0; j <= 9; j++)
    for (int k = 0; k < x; k++)
      A[(k * 10 + j) % x][k] = sum(A[(k * 10 + j) % x][k], mark[j]);
  matPower(b);
  cout << calcAns();
  return 0;
}
