#include<bits/stdc++.h>
#define ll long long
#define pp push_back
#define endl '\n'
#define all(x) x.begin(),x.end()
#define ld long double
#define PI acos(-1)
#define ones(x) __builtin_popcountll(x)
//#define int ll
using namespace std;
void Drakon() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifdef Clion
freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}
unsigned long long inf = 1e10;
const double EPS = 1e-6;
const int MOD = 1000000007, N = 1e6 + 5, LOG = 25;
ll mul(const ll &a, const ll &b) {
return (a % MOD + MOD) * (b % MOD + MOD) % MOD;
}
ll add(const ll &a, const ll &b) {
return (a + b + 2 * MOD) % MOD;
}
ll pw(ll x, ll y) {
ll ret = 1;
while (y > 0) {
if (y % 2 == 0) {
x = mul(x, x);
y = y / 2;
} else {
ret = mul(ret, x);
y = y - 1;
}
}
return ret;
}
int n, m, k, diamond[N];
vector<vector<int>> dp;
int slv(int x, int y) {
if(x < 0 || x >= n || y < 0 || y >= m) return 0;
if(~diamond[y] && x != diamond[y]) return 0;
if(x == n - 1 && y == m - 1) return 1;
int &ret = dp[x][y];
if(~ret)
return ret;
ret = add(slv(x, y + 1), add(slv(x + 1, y + 1), slv(x - 1, y + 1)));
return ret;
}
void solve() {
cin >> n >> m >> k;
dp = vector<vector<int>>(n, vector<int>(m, -1));
memset(diamond, -1, sizeof diamond);
for (int i = 0; i < k; ++i) {
int x, y;
cin >> x >> y;
x--, y--;
if(diamond[y] == -1 || diamond[y] == x) diamond[y] = x;
else {
cout << 0;
return;
}
}
cout << slv(n - 1, 0);
}
signed main() {
Drakon();
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcHAgcHVzaF9iYWNrCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBQSSBhY29zKC0xKQojZGVmaW5lIG9uZXMoeCkgX19idWlsdGluX3BvcGNvdW50bGwoeCkKLy8jZGVmaW5lIGludCBsbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgRHJha29uKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgY291dC50aWUobnVsbHB0cik7CiNpZmRlZiBDbGlvbgogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbiksIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9Cgp1bnNpZ25lZCBsb25nIGxvbmcgaW5mID0gMWUxMDsKY29uc3QgZG91YmxlIEVQUyA9IDFlLTY7CmNvbnN0IGludCBNT0QgPSAxMDAwMDAwMDA3LCBOID0gMWU2ICsgNSwgTE9HID0gMjU7CgpsbCBtdWwoY29uc3QgbGwgJmEsIGNvbnN0IGxsICZiKSB7CiAgICByZXR1cm4gKGEgJSBNT0QgKyBNT0QpICogKGIgJSBNT0QgKyBNT0QpICUgTU9EOwp9CgpsbCBhZGQoY29uc3QgbGwgJmEsIGNvbnN0IGxsICZiKSB7CiAgICByZXR1cm4gKGEgKyBiICsgMiAqIE1PRCkgJSBNT0Q7Cn0KCmxsIHB3KGxsIHgsIGxsIHkpIHsKICAgIGxsIHJldCA9IDE7CiAgICB3aGlsZSAoeSA+IDApIHsKICAgICAgICBpZiAoeSAlIDIgPT0gMCkgewogICAgICAgICAgICB4ID0gbXVsKHgsIHgpOwogICAgICAgICAgICB5ID0geSAvIDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0ID0gbXVsKHJldCwgeCk7CiAgICAgICAgICAgIHkgPSB5IC0gMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmV0Owp9CgppbnQgbiwgbSwgaywgZGlhbW9uZFtOXTsKdmVjdG9yPHZlY3RvcjxpbnQ+PiBkcDsKCmludCBzbHYoaW50IHgsIGludCB5KSB7CiAgICBpZih4IDwgMCB8fCB4ID49IG4gfHwgeSA8IDAgfHwgeSA+PSBtKSByZXR1cm4gMDsKICAgIGlmKH5kaWFtb25kW3ldICYmIHggIT0gZGlhbW9uZFt5XSkgcmV0dXJuIDA7CiAgICBpZih4ID09IG4gLSAxICYmIHkgPT0gbSAtIDEpIHJldHVybiAxOwogICAgaW50ICZyZXQgPSBkcFt4XVt5XTsKICAgIGlmKH5yZXQpCiAgICAgICAgcmV0dXJuIHJldDsKICAgIHJldCA9IGFkZChzbHYoeCwgeSArIDEpLCBhZGQoc2x2KHggKyAxLCB5ICsgMSksIHNsdih4IC0gMSwgeSArIDEpKSk7CiAgICByZXR1cm4gcmV0Owp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG4gPj4gbSA+PiBrOwogICAgZHAgPSB2ZWN0b3I8dmVjdG9yPGludD4+KG4sIHZlY3RvcjxpbnQ+KG0sIC0xKSk7CiAgICBtZW1zZXQoZGlhbW9uZCwgLTEsIHNpemVvZiBkaWFtb25kKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgKytpKSB7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICB4LS0sIHktLTsKICAgICAgICBpZihkaWFtb25kW3ldID09IC0xIHx8IGRpYW1vbmRbeV0gPT0geCkgZGlhbW9uZFt5XSA9IHg7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgMDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgc2x2KG4gLSAxLCAwKTsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBEcmFrb24oKTsKICAgIGludCB0ID0gMTsKICAgIC8vY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==