#include <bits/stdc++.h>
using namespace std;
long long int exp(long long int t, long long int x) {
  if (x == 0) return 1;
  if (x == 1) return t;
  if (x % 2 == 1) return (t * exp((t * t) % 1000000007, x / 2)) % 1000000007;
  if (x % 2 == 0) return exp((t * t) % 1000000007, x / 2);
}
long long int gcd(long long int x, long long int y) {
  return x % y == 0 ? y : gcd(y, x % y);
}
long long int lcm(long long int x, long long int y) {
  return x * (y / gcd(x, y));
}
bool isprime(long long int x) {
  for (long long int i = 2; i * i <= x; i++) {
    if (x % i == 0) {
      return false;
    }
  }
  return true;
}
void multiply(int n, long long int A[101][101], long long int B[101][101],
              long long int C[101][101]) {
  long long int sm = 0;
  for (int(i) = (0); (i) <= (n - 1); (i)++)
    for (int(j) = (0); (j) <= (n - 1); (j)++) {
      sm = 0;
      for (int(k) = (0); (k) <= (n - 1); (k)++) {
        sm += A[i][k] * B[k][j];
        sm %= 1000000007;
      }
      C[i][j] = sm;
    }
}
void copy(int n, long long int A[101][101], long long int C[101][101]) {
  for (int(i) = (0); (i) <= (n - 1); (i)++)
    for (int(j) = (0); (j) <= (n - 1); (j)++) C[i][j] = A[i][j];
}
void getIdentity(int n, long long int C[101][101]) {
  for (int(i) = (0); (i) <= (n - 1); (i)++)
    for (int(j) = (0); (j) <= (n - 1); (j)++)
      if (i == j)
        C[i][j] = 1;
      else
        C[i][j] = 0;
}
void display(int n, long long int A[101][101]) {
  for (int(i) = (0); (i) <= (n - 1); (i)++) {
    for (int(j) = (0); (j) <= (n - 1); (j)++) cout << A[i][j] << ' ';
    cout << endl;
  }
}
void power(int n, int k, long long int A[101][101], long long int C[101][101]) {
  long long int temp[101][101];
  copy(n, A, temp);
  getIdentity(n, C);
  for (int(i) = (0); (i) <= (30); (i)++) {
    if (k & (1 << i)) {
      multiply(n, C, temp, A);
      copy(n, A, C);
    }
    multiply(n, temp, temp, A);
    copy(n, A, temp);
  }
}
int main() {
  long long int n, b, k, x, num, newn;
  scanf("%lld %lld %lld %lld", &n, &b, &k, &x);
  long long int divs[101][101];
  memset(divs, 0, sizeof divs);
  for (int(i) = (0); (i) <= (n - 1); (i)++) {
    scanf("%lld", &num);
    for (int(j) = (0); (j) <= (x - 1); (j)++) {
      newn = j * 10 + num;
      newn = newn % x;
      ++divs[j][newn];
    }
  }
  long long int C[101][101];
  power(x, b, divs, C);
  printf("%lld\n", C[0][k]);
  return 0;
}
