#include <bits/stdc++.h>
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; ++i)
#define fi first
#define se second
#define el "\n"
#define pb push_back
#define sz(a) (int)a.size()
#define FILL(a, x) memset(a, x, sizeof(a))
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int N = (int)2e6+3, MAX = (int)2e6;
int k, T, mod;
int C[5005][5005];
ll F1[N], F2[N];
vector<int> Prime;
bool p[N];
void Solve1(){
C[0][0] = 1;
FOR(i, 1, 5000){
C[i][0] = 0;
C[0][i] = 1;
}
FOR(i, 1, 5000)
FOR(j, 1, 5000){
if (i > j) C[i][j] = 0;
if (i == j) C[i][j] = 1;
if (i < j){
C[i][j] = C[i][j-1] + C[i-1][j-1];
if (C[i][j] >= mod) C[i][j] -= mod;
}
}
while(T--){
int n, c;
cin >> n >> c;
cout << C[c][n+c] - 1 << " ";
}
}
ll Get1(ll a, ll b){
if (a > b) return 0;
return (F1[b]*F2[a]%mod*F2[b-a]%mod);
}
ll Get2(ll a, ll b){
a %= mod;
if (a > b) return 0;
ll res = F2[a];
FOR(i, 0, a-1) res = res*(b-i)%mod;
return res;
}
ll Mu(ll a, ll b){
if (b == 0) return 1;
ll res = 1;
a %= mod;
while(b != 0){
if (b&1){
res *= a;
res %= mod;
}
a *= a;
a %= mod;
b = (b >> 1);
}
return res;
}
void Solve2(){
F1[0] = 1;
FOR(i, 1, MAX) F1[i] = F1[i-1]*i%mod;
F2[MAX] = Mu(F1[MAX], mod - 2);
for(int i = MAX; i >= 1; i--) F2[i-1] = F2[i]*i%mod;
while(T--){
ll n, c;
cin >> n >> c;
ll res = -1;
if (k == 3) res += Get1(c, n+c);
else res += Get2(c, n+c);
if (res < 0) res += mod;
cout << res << " ";
}
}
int Tinh(ll p, ll H){
int res = 0;
ll Tam = p;
while(Tam <= H){
res += H/Tam;
Tam *= p;
}
return res;
}
void Solve3(){
for(int i = 2; i*i <= MAX; i++)
if (!p[i])
for(int j = i*i; j <= MAX; j += i) p[j] = 1;
FOR(i, 2, MAX)
if (!p[i]) Prime.pb(i);
while(T--){
int n, c;
cin >> n >> c;
ll res = 1;
for(int p : Prime){
if (p > n+c) break;
int d = Tinh(p, n+c) - Tinh(p, c) - Tinh(p, n);
res = res*Mu(p, d)%mod;
}
--res;
while(res < 0) res += mod;
cout << res << el;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
freopen("walls.inp", "r", stdin);
freopen("walls.out", "w", stdout);
cin >> k >> T >> mod;
if (k == 1 || k == 2) Solve1();
else if (k == 3 || k == 4) Solve2();
else Solve3();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvcihpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPD0gX2I7ICsraSkKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBzeihhKSAoaW50KWEuc2l6ZSgpCiNkZWZpbmUgRklMTChhLCB4KSBtZW1zZXQoYSwgeCwgc2l6ZW9mKGEpKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gaWk7CmNvbnN0IGludCBOID0gKGludCkyZTYrMywgTUFYID0gKGludCkyZTY7CmludCBrLCBULCBtb2Q7CmludCBDWzUwMDVdWzUwMDVdOwpsbCBGMVtOXSwgRjJbTl07CnZlY3RvcjxpbnQ+IFByaW1lOwpib29sIHBbTl07Cgp2b2lkIFNvbHZlMSgpewogICBDWzBdWzBdID0gMTsKICAgRk9SKGksIDEsIDUwMDApewogICAgICBDW2ldWzBdID0gMDsKICAgICAgQ1swXVtpXSA9IDE7CiAgIH0KICAgRk9SKGksIDEsIDUwMDApCiAgICBGT1IoaiwgMSwgNTAwMCl7CiAgICAgICBpZiAoaSA+IGopIENbaV1bal0gPSAwOwogICAgICAgaWYgKGkgPT0gaikgQ1tpXVtqXSA9IDE7CiAgICAgICBpZiAoaSA8IGopewogICAgICAgICAgQ1tpXVtqXSA9IENbaV1bai0xXSArIENbaS0xXVtqLTFdOwogICAgICAgICAgaWYgKENbaV1bal0gPj0gbW9kKSBDW2ldW2pdIC09IG1vZDsKICAgICAgIH0KICAgIH0KICAgd2hpbGUoVC0tKXsKICAgICAgaW50IG4sIGM7CiAgICAgIGNpbiA+PiBuID4+IGM7CiAgICAgIGNvdXQgPDwgQ1tjXVtuK2NdIC0gMSA8PCAiICI7CiAgIH0KfQoKbGwgR2V0MShsbCBhLCBsbCBiKXsKICBpZiAoYSA+IGIpIHJldHVybiAwOwogIHJldHVybiAoRjFbYl0qRjJbYV0lbW9kKkYyW2ItYV0lbW9kKTsKfQoKbGwgR2V0MihsbCBhLCBsbCBiKXsKICBhICU9IG1vZDsKICBpZiAoYSA+IGIpIHJldHVybiAwOwogIGxsIHJlcyA9IEYyW2FdOwogIEZPUihpLCAwLCBhLTEpIHJlcyA9IHJlcyooYi1pKSVtb2Q7CiAgcmV0dXJuIHJlczsKfQoKbGwgTXUobGwgYSwgbGwgYil7CiAgIGlmIChiID09IDApIHJldHVybiAxOwogICBsbCByZXMgPSAxOwogICBhICU9IG1vZDsKICAgd2hpbGUoYiAhPSAwKXsKICAgICAgIGlmIChiJjEpewogICAgICAgICAgcmVzICo9IGE7CiAgICAgICAgICByZXMgJT0gbW9kOwogICAgICAgfQogICAgICAgYSAqPSBhOwogICAgICAgYSAlPSBtb2Q7CiAgICAgICBiID0gKGIgPj4gMSk7CiAgIH0KICAgcmV0dXJuIHJlczsKfQoKdm9pZCBTb2x2ZTIoKXsKICBGMVswXSA9IDE7CiAgRk9SKGksIDEsIE1BWCkgRjFbaV0gPSBGMVtpLTFdKmklbW9kOwogIEYyW01BWF0gPSBNdShGMVtNQVhdLCBtb2QgLSAyKTsKICBmb3IoaW50IGkgPSBNQVg7IGkgPj0gMTsgaS0tKSBGMltpLTFdID0gRjJbaV0qaSVtb2Q7CiAgd2hpbGUoVC0tKXsKICAgICAgICBsbCBuLCBjOwogICAgICAgIGNpbiA+PiBuID4+IGM7CiAgICAgICAgbGwgcmVzID0gLTE7CiAgICAgICAgaWYgKGsgPT0gMykgcmVzICs9IEdldDEoYywgbitjKTsKICAgICAgICBlbHNlIHJlcyArPSBHZXQyKGMsIG4rYyk7CiAgICAgICAgaWYgKHJlcyA8IDApIHJlcyArPSBtb2Q7CiAgICAgICAgY291dCA8PCByZXMgPDwgIiAiOwogICB9Cn0KCmludCBUaW5oKGxsIHAsIGxsIEgpewogIGludCByZXMgPSAwOwogIGxsIFRhbSA9IHA7CiAgd2hpbGUoVGFtIDw9IEgpewogICAgICByZXMgKz0gSC9UYW07CiAgICAgIFRhbSAqPSBwOwogIH0KICByZXR1cm4gcmVzOwp9Cgp2b2lkIFNvbHZlMygpewogICBmb3IoaW50IGkgPSAyOyBpKmkgPD0gTUFYOyBpKyspCiAgICAgaWYgKCFwW2ldKQogICAgICBmb3IoaW50IGogPSBpKmk7IGogPD0gTUFYOyBqICs9IGkpIHBbal0gPSAxOwogICBGT1IoaSwgMiwgTUFYKQogICAgaWYgKCFwW2ldKSBQcmltZS5wYihpKTsKICAgd2hpbGUoVC0tKXsKICAgICAgaW50IG4sIGM7CiAgICAgIGNpbiA+PiBuID4+IGM7CiAgICAgIGxsIHJlcyA9IDE7CiAgICAgIGZvcihpbnQgcCA6IFByaW1lKXsKICAgICAgICAgaWYgKHAgPiBuK2MpIGJyZWFrOwogICAgICAgICBpbnQgZCA9IFRpbmgocCwgbitjKSAtIFRpbmgocCwgYykgLSBUaW5oKHAsIG4pOwogICAgICAgICByZXMgPSByZXMqTXUocCwgZCklbW9kOwogICAgICB9CiAgICAgLS1yZXM7CiAgICAgd2hpbGUocmVzIDwgMCkgcmVzICs9IG1vZDsKICAgICBjb3V0IDw8IHJlcyA8PCBlbDsKICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsgICAgY291dC50aWUoTlVMTCk7CiAgICBmcmVvcGVuKCJ3YWxscy5pbnAiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIndhbGxzLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIGNpbiA+PiBrID4+IFQgPj4gbW9kOwogICAgaWYgKGsgPT0gMSB8fCBrID09IDIpIFNvbHZlMSgpOwogICAgIGVsc2UgaWYgKGsgPT0gMyB8fCBrID09IDQpIFNvbHZlMigpOwogICAgICAgZWxzZSBTb2x2ZTMoKTsKICAgIHJldHVybiAwOwp9Cg==