代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e6 + 1;
int n, p, k;
int a[N], po[N], s[N], inv_s[N];
int ans = 0;
int read(){
int x=0,flag=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')flag=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return flag*x;
}
int qp(int x, int y, int mod) {
int res = 1;
x %= mod;
while (y > 0) {
if (y % 2) res = res * x % mod;
x = x * x % mod;
y >>= 1;
}
return res;
}
signed main() {
n=read(),p=read(),k=read();
for (int i = 1; i <= n; i++) {
a[i]=read();
}
po[0] = 1;
s[0] = 1;
for (int i = 1; i <= n; i++) {
po[i] = po[i-1] * k % p;
s[i] = s[i-1] * a[i] % p;
}
inv_s[n] = qp(s[n], p-2, p);
for (int i = n-1; i >= 0; i--) {
inv_s[i] = inv_s[i+1] * a[i+1] % p;
}
for (int i = 1; i <= n; i++) {
int inv_a = inv_s[i] * s[i-1] % p;
ans = (ans + po[i] * inv_a % p) % p;
}
printf("%lld\n", ans);
return 0;
}