#include <bits/stdc++.h>
using namespace std;
vector<long long int> base;
int n, b, k, x;
long long int modpow(int p) {
  if (p == 0) return 1LL;
  if (p == 1) return 10LL % x;
  long long int res = modpow(p / 2);
  res = res * res % x;
  if (p % 2) res = res * 10LL % x;
  return res;
}
long long int getres(long long int left, long long int right, int len) {
  long long int res = left * modpow(len) % x;
  res += right;
  res %= x;
  return res;
}
vector<long long int> get(int p) {
  if (p == 1) return base;
  if (p % 2 == 0) {
    vector<long long int> prev = get(p / 2);
    int cur;
    vector<long long int> ret;
    ret.resize(x);
    for (int i = 0; i < x; i++) {
      for (int j = 0; j < x; j++) {
        cur = (int)getres(i, j, p / 2);
        cur %= x;
        if (cur < 0) cur += x;
        ret[cur] += prev[i] * prev[j] % 1000000007;
        ret[cur] %= 1000000007;
      }
    }
    return ret;
  }
  int cur;
  vector<long long int> prev = get(p - 1), ret;
  ret.resize(x);
  for (int i = 0; i < x; i++) {
    for (int j = 0; j < x; j++) {
      cur = (int)getres(i, j, p - 1);
      cur %= x;
      if (cur < 0) cur += x;
      ret[cur] += base[i] * prev[j] % 1000000007;
      ret[cur] %= 1000000007;
    }
  }
  return ret;
}
int a[100010], cnt[100010];
int main() {
  cin >> n >> b >> k >> x;
  base.resize(x);
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    a[i] %= x;
    base[a[i]]++;
  }
  vector<long long int> ret = get(b);
  cout << (ret[k] + 1000000007) % 1000000007 << endl;
  return 0;
}
