#include<stdio.h>
#include<iostream>
#include <string.h>
#include<time.h>
using namespace std;
typedef struct {
int i, j;
}KOORD;
#define MOD 2000003L
int cmp(const void *, const void *);
int main() {
long long i, j, z, N, M;
int C;
freopen("padure2.in", "r", stdin);
freopen("padure2.out", "w", stdout);
long long *apa, *fiu, *tmp;
cin >> N >> M >> C;
apa = new long long[M + 1];
fiu = new long long[M + 1];
for (i = 0; i <= M; ++i) {
apa[i] = 1;
}
KOORD *gomba;
gomba = new KOORD[C];
for (i = 0; i < C; ++i) {
cin >> gomba[i].i >> gomba[i].j;
--gomba[i].i;
--gomba[i].j;
}
qsort(gomba, C, sizeof(KOORD), cmp);
z = 0;
//memset(apa, 1, M);
for (i = 1; i < N ; ++i) {
fiu[0] = 1;
for (j = 1; j < M; ++j) {
if (z < C &&i == gomba[z].i && j == gomba[z].j) {
fiu[j] = 0;
++z;
}
else {
fiu[j] = (apa[j] + fiu[j - 1]);
}
if (fiu[j] >= MOD) {
fiu[j] -= MOD;
}
}
tmp = apa;
apa = fiu;
fiu = tmp;
}
printf("%lld\n", apa[M - 1]);
return 0;
}
int cmp(const void *p, const void *q) {
KOORD a = *(KOORD *)p, b = *(KOORD *)q;
if (a.i < b.i) return -1;
else
if (a.i == b.i) {
if (a.j < b.j) return -1;
else
return 1;
}
else {
return 1;
}
}