#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
const long long int md = 1e9 + 7;
long long int mat[MAXN][MAXN], tmp[MAXN][MAXN], ans[MAXN][MAXN];
int n, b, x, k, cnt[MAXN];
inline void mul(long long int a[MAXN][MAXN], long long int b[MAXN][MAXN],
                long long int res[MAXN][MAXN]) {
  for (int i = 0; i < x; i++)
    for (int j = 0; j < x; j++) {
      res[i][j] = 0ll;
      for (int k = 0; k < x; k++) {
        res[i][j] += ((a[i][k] * b[k][j] >= md) ? ((a[i][k] * b[k][j]) % md)
                                                : (a[i][k] * b[k][j]));
        if (res[i][j] >= md) res[i][j] -= md;
      }
    }
  return;
}
inline void pw(long long int a[MAXN][MAXN], long long int b,
               long long int res[MAXN][MAXN]) {
  for (int i = 0; i < x; i++)
    for (int j = 0; j < x; j++) res[i][j] = (long long int)(i == j);
  while (b) {
    if (b & 1) {
      mul(res, a, tmp);
      memcpy(res, tmp, sizeof tmp);
    }
    mul(a, a, tmp);
    memcpy(a, tmp, sizeof tmp);
    b /= 2ll;
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> b >> k >> x;
  for (int i = 0; i < n; i++) {
    int a;
    cin >> a;
    cnt[(a % x)]++;
  }
  for (int i = 0; i < x; i++)
    for (int j = 0; j < x; j++) {
      int y = (((j - (10 * i)) % x) + x) % x;
      mat[i][j] = cnt[y];
    }
  pw(mat, b - 1, ans);
  long long int s = 0;
  for (int i = 0; i < 10; i++) {
    s += (ans[i][k] * (long long int)cnt[i]) % md;
    s %= md;
  }
  cout << s << endl;
  return 0;
}
