#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
long long fastexp(long long b, long long exp) {
  if (exp == 0) return 1;
  long long temp = fastexp(b, exp / 2);
  temp = (temp * temp) % 998244353;
  if (exp % 2 == 1) temp *= b;
  return temp % 998244353;
}
long long fact[100001], inv[100001];
void precompute() {
  fact[0] = 1;
  inv[0] = 1;
  for (int i = 1; i <= 100000; i++) {
    fact[i] = (fact[i - 1] * i) % 998244353;
    inv[i] = fastexp(fact[i], 998244353 - 2);
  }
}
long long choose(int n, int k) {
  if (n < 0 || k < 0 || k > n) return 0;
  long long ans = (fact[n] * inv[k]) % 998244353;
  ans = (ans * inv[n - k]) % 998244353;
  return ans;
}
bool row[3605], col[3605];
int H, W, N;
long long dp1[3605][3605], dp2[3605][3605];
int emptyH, emptyW;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  precompute();
  cin >> H >> W >> N;
  for (int i = 0; i < N; i++) {
    int r1, c1, r2, c2;
    cin >> r1 >> c1 >> r2 >> c2;
    row[r1] = true;
    row[r2] = true;
    col[c1] = true;
    col[c2] = true;
  }
  for (int i = 1; i <= H; i++)
    if (!row[i]) emptyH++;
  for (int i = 1; i <= W; i++)
    if (!col[i]) emptyW++;
  dp1[0][0] = true;
  for (int i = 1; i <= H; i++) {
    for (int j = 0; j <= i; j++) {
      if (row[i] || row[i - 1])
        dp1[i][j] = dp1[i - 1][j];
      else {
        dp1[i][j] = dp1[i - 1][j];
        if (i - 2 >= 0 && j - 1 >= 0) dp1[i][j] += dp1[i - 2][j - 1];
        dp1[i][j] %= 998244353;
      }
    }
  }
  dp2[0][0] = true;
  for (int i = 1; i <= W; i++) {
    for (int j = 0; j <= i; j++) {
      if (col[i] || col[i - 1])
        dp2[i][j] = dp2[i - 1][j];
      else {
        dp2[i][j] = dp2[i - 1][j];
        if (i - 2 >= 0 && j - 1 >= 0) dp2[i][j] += dp2[i - 2][j - 1];
        dp2[i][j] %= 998244353;
      }
    }
  }
  long long ans = 0;
  for (int i = 0; i <= H; i++) {
    for (int j = 0; j <= W; j++) {
      long long R = dp1[H][j] * choose(emptyH - 2 * j, i);
      R %= 998244353;
      long long C = dp2[W][i] * choose(emptyW - 2 * i, j);
      C %= 998244353;
      long long F = (fact[i] * fact[j]) % 998244353;
      ans += ((R * C) % 998244353 * F) % 998244353;
      ans %= 998244353;
    }
  }
  cout << ans << endl;
  return 0;
}
