不会是评测机波动吧
毒瘤鱼
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cctype>
using namespace std;
const int MAXN=5e6+5;
typedef long long ll;
int n,p,k,ans;
int a[MAXN],inv[MAXN];
int prod1[MAXN],prod2[MAXN];
namespace mine
{
int read(void)
{
int num=0;
bool negative=false;
char c=getchar();
while(!isdigit(c) && c!='-') {
c=getchar();
}
if(c=='-') {
negative=true;
} else {
num=c-'0';
}
c=getchar();
while(isdigit(c)) {
num=(num<<1)+(num<<3)+(c^48);
c=getchar();
}
return negative?0-num:num;
}
void print(int a)
{
if(a<0) {
putchar('-'),a=-a;
}
if(a>9) {
print(a/10);
}
putchar(a%10+'0');
}
}
int qpow(int base,int nk)
{
int res=1;
while(nk) {
if(nk&1) {
res=1ll*res*base%p;
}
nk>>=1;
base=1ll*base*base%p;
}
return res;
}
int main()
{
n=mine::read();
p=mine::read();
k=mine::read();
for(register int i=1; i<=n; i++) {
a[i]=mine::read();
}
prod1[0]=prod2[n+1]=1;
for(register int i=1; i<=n; i++) {
prod1[i]=1ll*prod1[i-1]*a[i]%p;
}
for(register int i=n; i>=1; i--) {
prod2[i]=1ll*prod2[i+1]*a[i]%p;
}
inv[n+1]=qpow(prod1[n],p-2)%p;
for(register int i=1; i<=n; i++) {
inv[i]=1ll*inv[n+1]*prod1[i-1]%p*prod2[i+1]%p;
}
register ll K=1;
for(register int i=1; i<=n; i++) {
K=1ll*K*k%p;
ans=(ans+1ll*K*inv[i]%p)%p;
}
mine::print(ans);
putchar('\n');
return 0;
}