#include using namespace std; #define MaxN 500002 typedef long long int ll; ll fordp[MaxN],backdp[MaxN],betdp[MaxN]; int sumN,sumQ; ll binpow(ll a,ll b,ll M) { ll answer =1; while(b){ if(b&1){ answer = (answer*a)%M; } a=(a*a)%M; b>>=1; } return answer; } void solve() { ll answer; int N,M,Q,r,x; scanf("%d%d%d",&N,&M,&Q); sumN+=N; sumQ+=Q; fordp[0]=1;backdp[0]=1; for(int i=1;i<=N/2;i++) fordp[i] = (fordp[i-1]*binpow(i,i-1,M))%M; x = 1; for(ll i=1;i<=N/2;i++) backdp[i]= (backdp[i-1]*binpow(N-i+1,i,M))%M; if(N&1) betdp[N/2] = N/2 +1; else betdp[N/2]=1; for(ll i=N/2-1;i>=1;i--){ betdp[i] = ((ll)((betdp[i+1]*(i+1))%M)*(ll)(N-i))%M; } while(Q--){ scanf("%d",&r); r= min(r,N-r); answer = ((ll)((fordp[r] * binpow(betdp[r],r,M))%M) * backdp[r])%M; printf("%lld\n",answer); } } int main() { sumN=sumQ=0; int test; scanf("%d",&test); while(test--){ solve(); } return 0; }