#include<iostream>
#include<algorithm>
using namespace std;
#define mod 998244353
#define ll long long
struct node {
int a, b;
};
node arr[50005];
int b[100005];
int cnt;
ll dp[100005],f[100005];
int main() {
int n, m, k;
cin >> n >> m >> k;
bool ff = 0;
for (int i = 1; i <= k; i++) {
cin >> arr[i].a >> arr[i].b;
if (arr[i].a == 1 || arr[i].b == 1)ff = 1;
b[++cnt] = arr[i].a;
b[++cnt] = arr[i].b;
}
sort(b + 1, b + 1 + cnt);
cnt = unique(b + 1, b + 1 + cnt) - (b + 1);
for (int i = 1; i <= k; i++) {
arr[i].a = lower_bound(b + 1, b + cnt + 1, arr[i].a) - b;
arr[i].b = lower_bound(b + 1, b + cnt + 1, arr[i].b) - b;
}
dp[1] = 1;
if (!ff)cnt++;
for (int i = 1; i <= m; i++) {
ll tot = 0;
for (int j = 1; j <= cnt + 1; j++) {
f[j] = dp[j];
tot = (tot + f[j]) % mod;
}
tot = (tot + ((n - cnt - 1) * f[cnt + 1]) % mod) % mod;
for (int j = 1; j <= cnt + 1; j++) {
dp[j] = (tot - f[j] + mod) % mod;
}
for (int j = 1; j <= k; j++) {
if (arr[j].a != arr[j].b)dp[arr[j].b] = (dp[arr[j].b] - f[arr[j].a] + mod) % mod;
}
}
cout << dp[1];
return 0;
}