#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const int MAXN = 100;
long long n, b, re, x;
long long dp[MAXN];
struct Mat {
  long long mat[MAXN][MAXN];
  Mat() { memset(mat, 0, sizeof(mat)); }
  friend Mat operator*(Mat a, Mat b) {
    Mat t = Mat();
    for (int i = 0; i < x; i++)
      for (int j = 0; j < x; j++)
        for (int k = 0; k < x; k++)
          t.mat[i][j] = (t.mat[i][j] + a.mat[i][k] * b.mat[k][j]) % MOD;
    return t;
  }
} arr;
long long ans = 0;
void Fast_Pow(Mat a, long long b) {
  Mat res = Mat();
  for (int i = 0; i < x; i++) res.mat[i][i] = 1;
  while (b) {
    if (b & 1) res = res * a;
    a = a * a;
    b >>= 1;
  }
  for (int i = 0; i < x; i++) ans = (ans + dp[i] * res.mat[i][re]) % MOD;
}
int main() {
  cin >> n >> b >> re >> x;
  int val;
  for (int i = 0; i < n; i++) {
    cin >> val;
    dp[val % x]++;
    for (int j = 0; j < x; j++) {
      arr.mat[j][(j * 10 + val) % x]++;
    }
  }
  Fast_Pow(arr, b - 1);
  cout << ans << endl;
  return 0;
}
