#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int INF = 0x3f3f3f3f;
long long mod = 1e9 + 7;
int d[15];
long long a[N][N];
void mul(long long (*a)[N], long long (*b)[N], long long (*rnt)[N]) {
  long long c[N][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] += a[i][k] * b[k][j];
        c[i][j] %= mod;
      }
    }
  }
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      rnt[i][j] = c[i][j];
    }
  }
}
void quick_pow(long long (*a)[N], long long (*rnt)[N], long long p) {
  long long x[N][N];
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      x[i][j] = a[i][j];
      rnt[i][j] = i == j ? 1 : 0;
    }
  }
  while (p) {
    if (p & 1) {
      mul(rnt, x, rnt);
    }
    p >>= 1;
    mul(x, x, x);
  }
}
int main() {
  int n, b, k, x;
  int t;
  long long ans = 0;
  scanf("%d%d%d%d", &n, &b, &k, &x);
  for (int i = 0; i < n; i++) {
    scanf("%d", &t);
    d[t]++;
  }
  for (int i = 1; i <= 9; i++) {
    for (int j = 0; j < x; j++) {
      t = (j * 10 + i) % x;
      a[t][j] += d[i];
    }
  }
  quick_pow(a, a, b);
  printf("%I64d\n", a[k][0]);
  return 0;
}
