#include <bits/stdc++.h>
using namespace std;
long long b[105][105], ans[105][105];
int cnt[100005];
int e;
inline void mul(long long x[105][105], long long y[105][105],
                long long z[105][105]) {
  long long t[105][105];
  memset(t, 0, sizeof(t));
  for (int i = 0; i < e; i++) {
    for (int j = 0; j < e; j++) {
      for (int k = 0; k < e; k++) {
        t[i][j] = (t[i][j] + x[i][k] * y[k][j] % 1000000007) % 1000000007;
      }
    }
  }
  for (int i = 0; i < e; i++) {
    for (int j = 0; j < e; j++) {
      z[i][j] = t[i][j] % 1000000007;
    }
  }
}
int main() {
  int n, b1, k, x;
  scanf("%d %d %d %d", &n, &b1, &k, &x);
  e = x;
  for (int i = 1; i <= n; i++) {
    int o;
    scanf("%d", &o);
    cnt[o]++;
  }
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < 10; j++) {
      b[i][(i * 10 + j) % x] += cnt[j];
    }
  }
  for (int i = 0; i < x; i++) ans[i][i] = 1;
  for (; b1; b1 >>= 1) {
    if (b1 & 1) mul(ans, b, ans);
    mul(b, b, b);
  }
  printf("%lld\n", ans[0][k]);
  return 0;
}
