#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
using namespace std;
typedef unsigned long long ull;
const int maxn=5e6+5;
inline ull read(){
ull ans=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
ans=(ans<<3)+(ans<<1)+ch-'0';
ch=getchar();
}
return ans*f;
}
ull n,p,k;
ull a[maxn],s[maxn]={1},s1[maxn];
inline ull mul(ull a,ull b){
ull base=a,ans=1;
while(b){
if(b&1)
ans=(ans*base)%p;
base=(base*base)%p;
b>>=1;
}
return ans;
}
int main(){
n=read();p=read();k=read();
for(int i=1;i<=n;i++)
a[i]=read(),s[i]=(s[i-1]*a[i])%p;//putchar('\n'),
s1[n]=mul(s[n],p-2);
for(int i=n;i>=2;i--)
s1[i-1]=(s1[i]*a[i])%p;
ull ans=0,kk=k;
for(int i=1;i<=n;i++){
ans=(ans+((s[i-1]*s1[i])%p)*kk)%p;
kk=(kk*k)%p;
}
printf("%lld",ans);
return 0;
}