#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long n, b, k, x, a[50005], c[105];
map<long long, long long> dp[105];
long long add(long long x, long long y) { return (x + y) % MOD; }
long long mul(long long x, long long y) { return x * y % MOD; }
long long binpow(long long a, long long b) {
  if (b == 0) return 1;
  if (b % 2) return a * binpow(a, b - 1) % x;
  long long c = binpow(a, b / 2);
  return c * c % x;
}
void calc(long long N) {
  if (N == 0) {
    dp[0][0] = 1;
    return;
  }
  if (N % 2) {
    calc(N - 1);
    for (long long i = 0; i < x; i++) {
      for (long long j = 0; j < x; j++) {
        dp[i][N] =
            add(dp[i][N], mul(dp[j][N - 1], c[(i - j * 10 + 100000 * x) % x]));
      }
    }
  } else {
    calc(N / 2);
    for (long long i = 0; i < x; i++)
      for (long long j = 0; j < x; j++) {
        dp[i][N] =
            add(dp[i][N],
                mul(dp[j][N / 2],
                    dp[(i - j * binpow(10, N / 2) + 100000 * x) % x][N / 2]));
      }
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> b >> k >> x;
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
    c[a[i] % x]++;
  }
  calc(b);
  cout << dp[k][b];
}
