← Home
```go
package main

import (
    "fmt"
)

const MOD = 1000000007

func multiply(A, B [][]int64, sz int) [][]int64 {
    C := make([][]int64, sz)
    for i := 0; i < sz; i++ {
        C[i] = make([]int64, sz)
        for m := 0; m < sz; m++ {
            for j := 0; j < sz; j++ {
                C[i][j] = (C[i][j] + A[i][m]*B[m][j]) % MOD
            }
        }
    }
    return C
}

func matPow(mat [][]int64, pow, sz int) [][]int64 {
    res := make([][]int64, sz)
    for i := 0; i < sz; i++ {
        res[i] = make([]int64, sz)
        res[i][i] = 1
    }
    for pow > 0 {
        if pow&1 == 1 {
            res = multiply(res, mat, sz)
        }
        mat = multiply(mat, mat, sz)
        pow >>= 1
    }
    return res
}

func main() {
    var n, b, k, x int
    fmt.Scan(&n, &b, &k, &x)
    
    cnt := make([]int64, 10)
    for i := 0; i < n; i++ {
        var a int
        fmt.Scan(&a)
        cnt[a]++
    }
    
    M := make([][]int64, x)
    for i := 0; i < x; i++ {
        M[i] = make([]int64, x)
    }
    
    for r := 0; r < x; r++ {
        for d := 1; d <= 9; d++ {
            newR := (r*10 + d) % x
            M[r][newR] = (M[r][newR] + cnt[d]) % MOD
        }
    }
    
    res := matPow(M, b, x)
    
    fmt.Println(res[0][k])
}
```