#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
typedef long long ll;
typedef vector<int> vi;

#define pb push_back
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second
#define rep(i,n) rep2(i,0,n)
#define rep2(i,m,n) for(int i=m;i<(n);i++)
#define ALL(c) (c).begin(),(c).end()

const ll MOD = 1000000007;
const int MN = 70;
const int MX = 1000010;
const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, 1, -1};

bool ex[MX], ey[MX];
ll f[MN][MN];

int main() {
	int H, W, N;
	cin >> H >> W >> N;

	vector<pii> pt(N);

	vi xs, ys;
	xs.pb(0); xs.pb(H); ys.pb(0); ys.pb(W);

	rep(i, N) {
		cin >> pt[i].fi >> pt[i].se;
		ex[pt[i].fi] = ey[pt[i].se] = 1;
		xs.pb(pt[i].fi); xs.pb(pt[i].fi + 1);
		ys.pb(pt[i].se); ys.pb(pt[i].se + 1);
	}

	sort(ALL(xs)); sort(ALL(ys));
	xs.erase(unique(ALL(xs)), xs.end()); ys.erase(unique(ALL(ys)), ys.end());

	int sx = xs.size(), sy = ys.size();

	rep(i, N) {
		int p = lower_bound(ALL(xs), pt[i].fi) - xs.begin();
		int q = lower_bound(ALL(ys), pt[i].se) - ys.begin();
		f[p][q] = -1;
	}

	rep(i, sx-1) {
		rep(j, sy-1) {
			if (f[i][j] != -1) {
				f[i][j] = (ll)(xs[i+1] - xs[i]) * (ys[j+1] - ys[j]) % MOD;
			}
		}
	}

	ll ret = 0;
	rep(i, sx-1) {
		rep(j, sy-1) if (f[i][j] != -1) {
			queue<pii> que;
			que.push(mp(i, j));

			vector<vi> d(sx, vi(sy));
			rep(ii, sx) rep(jj, sy) d[ii][jj] = -1;
			d[i][j] = 0;

			while (!que.empty()) {
				pii p = que.front(); que.pop();
				int x = p.fi, y = p.se;
				rep(dir, 4) {
					int nx = x + dx[dir], ny = y + dy[dir];
					if (nx >= 0 && nx < sx-1 && ny >= 0 && ny < sy-1 && f[nx][ny] != -1 && d[nx][ny] == -1) {
						d[nx][ny] = d[x][y] + 1;
						que.push(mp(nx, ny));
					}
				}
			}

			rep(p, sx) {
				rep(q, sy) {
					if (d[p][q] != -1) {
						ret = (ret + f[p][q] * f[i][j] % MOD * d[p][q]) % MOD;
					}
				}
			}
		}
	}

	ret = (MOD + 1) / 2 * ret % MOD;

	sort(ALL(pt));
	int p = 0;

	rep(i, H-1) {
		if (!ex[i] && !ex[i+1]) {
			while (p < N && pt[p].fi <= i) {
				++p;
			}
			ll nx = ((ll)W * (i + 1) - p) % MOD;
			ll ny = ((ll)W * (H - i - 1) - (N - p)) % MOD;
			ret = (ret + nx * ny) % MOD;
		}
	}

	p = 0;
	rep(i, N) swap(pt[i].fi, pt[i].se);
	sort(ALL(pt));

	rep(i, W-1) {
		if (!ey[i] && !ey[i+1]) {
			while (p < N && pt[p].fi <= i) {
				++p;
			}
			ll nx = ((ll)H * (i + 1) - p) % MOD;
			ll ny = ((ll)H * (W - i - 1) - (N - p)) % MOD;
			ret = (ret + nx * ny) % MOD;	
		}
	}

	cout << ret << endl;
	return 0;
}