#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m, q;
  cin >> n >> m >> q;
  vector<bool> a0(n + 1), a1(m + 1);
  a0[0] = true;
  a1[0] = true;
  for (int i = 0; i < q; i++) {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    a0[a] = true;
    a1[b] = true;
    a0[c] = true;
    a1[d] = true;
  }
  int rn = 0, rm = 0;
  for (int i = 1; i <= n; i++) {
    if (!a0[i]) rn++;
  }
  for (int i = 1; i <= m; i++) {
    if (!a1[i]) rm++;
  }
  long long mod = 998244353;
  int fs = 505050;
  vector<long long> fact(fs), ifact(fs), invs(fs);
  fact[0] = ifact[0] = fact[1] = ifact[1] = invs[1] = 1;
  for (int i = 2; i < fs; i++) {
    fact[i] = fact[i - 1] * i % mod;
    invs[i] = mod - invs[mod % i] * (mod / i) % mod;
    ifact[i] = ifact[i - 1] * invs[i] % mod;
  }
  function<long long(int, int)> binom = [&](int a, int b) {
    if (a < b || b < 0) return 0LL;
    return fact[a] * ifact[b] % mod * ifact[a - b] % mod;
  };
  vector<vector<long long>> dp0(n + 1, vector<long long>(n + 1));
  dp0[0][0] = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= n; j++) {
      dp0[i + 1][j] = dp0[i][j];
      if (a0[i] || a0[i + 1] || j == 0) continue;
      dp0[i + 1][j] = (dp0[i + 1][j] + dp0[i - 1][j - 1]) % mod;
    }
  }
  vector<vector<long long>> dp1(m + 1, vector<long long>(m + 1));
  dp1[0][0] = 1;
  for (int i = 0; i < m; i++) {
    for (int j = 0; j <= m; j++) {
      dp1[i + 1][j] = dp1[i][j];
      if (a1[i] || a1[i + 1] || j == 0) continue;
      dp1[i + 1][j] = (dp1[i + 1][j] + dp1[i - 1][j - 1]) % mod;
    }
  }
  long long res = 0;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= m; j++) {
      long long coef = dp0[n][i] * dp1[m][j] % mod * binom(rn - 2 * i, j) %
                       mod * binom(rm - 2 * j, i) % mod;
      if (coef == 0) break;
      coef = coef * fact[i] % mod * fact[j] % mod;
      res = (res + coef) % mod;
    }
  }
  cout << res << "\n";
  return 0;
}
