MOD = 10**9 + 7 def main(): import sys input = sys.stdin.read().split() ptr = 0 p = int(input[ptr]); ptr +=1 n = int(input[ptr]); ptr +=1 k = int(input[ptr]); ptr +=1 b = int(input[ptr]); ptr +=1 a = list(map(int, input[ptr:ptr+n])) ptr +=n # Precompute f(c) for all c in 0..p-1 f = [0] * p if p == 1: # Edge case, but p >=2 in input pass else: g = 1 if p != 1: g = pow(k, p-2, p-1) g = pow(k, g, p) # Wait, no. Let's compute g = gcd(k, p-1) g_val = gcd(k, p-1) # Compute f(c) f[0] = 1 if p-1 ==0: # p=1, but input p >=2 pass else: e = (p-1) // g_val for c in range(1, p): res = pow(c, e, p) if res ==1: f[c] = g_val else: f[c] =0 # Precompute cnt_i for each a_i cnt_list = [] zero_count =0 for ai in a: if ai ==0: zero_count +=1 continue inv_ai = pow(ai, p-2, p) cnt = [0]*p for v in range(p): c = (v * inv_ai) % p cnt[v] = f[c] cnt_list.append(cnt) # Compute DP dp = [0]*p dp[0] =1 for cnt in cnt_list: new_dp = [0]*p for s in range(p): if dp[s] ==0: continue for v in range(p): if cnt[v] ==0: continue new_s = (s + v) % p new_dp[new_s] = (new_dp[new_s] + dp[s] * cnt[v]) % MOD dp = new_dp # Multiply by p^zero_count mod MOD ans = dp[b] * pow(p, zero_count, MOD) % MOD print(ans) def gcd(a, b): while b: a, b = b, a%b return a if __name__ == '__main__': main()