@[RTX7070Ti](/user/731239)
```cpp
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
using namespace std;
long long n, p, p2, k, ans;
long long a[5000010], pre[5000010], suf[5000010];
long long inv(long long x){
if (x == 1) return 1;
return (p - p / x) * inv(p % x) % p;
}
inline void read(long long &x)
{
char ch = getchar(); x = 0;
while(ch < '0' || ch > '9') ch = getchar();
while(ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
}
int main(){
//freopen("P5431_1.in", "r", stdin);
//freopen("P5431_1.out", "w", stdout);
read(n); read(p); read(k);
for (long long i = 1; i <= n; i++){
read(a[i]);
}
pre[1] = a[1];
for (long long i = 2; i <= n; i++){
pre[i] = pre[i - 1] * a[i] % p;
}
suf[n] = a[n];
for (long long i = n - 1; i >= 1; i--){
suf[i] = suf[i + 1] * a[i] % p;
}
pre[0] = suf[n + 1] = 1;
for (long long i = 1, j = k; i <= n; i++, j = j * k % p){
ans += (long long)j * (pre[i - 1] * suf[i + 1] % p) % p;
ans %= p;
}
cout << ans * inv(pre[n]) % p;
return 0;
}
```
by Estelle_N @ 2024-03-28 16:36:19