#include <bits/stdc++.h>
#pragma GCC optimize(4)
using namespace std;
char _buf[100000], *_p1 = _buf, *_p2 = _buf;
inline int gi() {
  int x = 0, f = 1;
  char ch = (_p1 == _p2 && (_p2 = (_p1 = _buf) + fread(_buf, 1, 100000, stdin),
                            _p1 == _p2)
                 ? EOF
                 : *_p1++);
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = (_p1 == _p2 && (_p2 = (_p1 = _buf) + fread(_buf, 1, 100000, stdin),
                         _p1 == _p2)
              ? EOF
              : *_p1++);
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 3) + (x << 1) + (ch ^ 48);
    ch = (_p1 == _p2 && (_p2 = (_p1 = _buf) + fread(_buf, 1, 100000, stdin),
                         _p1 == _p2)
              ? EOF
              : *_p1++);
  }
  return (f == 1) ? x : -x;
}
inline int max(int a, int b) { return a > b ? a : b; }
inline int min(int a, int b) { return a < b ? a : b; }
const int maxn = 3605, mod = 998244353;
int n, m, k, x, y;
long long f[maxn][maxn], g[maxn][maxn];
bool visx[maxn], visy[maxn];
long long inv[maxn], fac[maxn];
inline long long C(int x, int y) {
  if (x < y) return 0;
  return ((fac[x] * inv[y] % mod) * inv[x - y] % mod);
}
inline void init() {
  inv[0] = inv[1] = fac[0] = fac[1] = 1;
  for (int i = 2; i <= 3600; ++i)
    fac[i] = fac[i - 1] * i % mod,
    inv[i] = (mod - mod / i) * inv[mod % i] % mod;
  for (int i = 2; i <= 3600; ++i) inv[i] = (inv[i] * inv[i - 1]) % mod;
}
inline void input() {
  n = gi(), m = gi(), k = gi();
  for (int i = 1; i <= k; ++i) {
    x = gi(), y = gi();
    visy[x] = 1, visx[y] = 1;
    x = gi(), y = gi();
    visy[x] = 1, visx[y] = 1;
  }
}
inline void solve() {
  int cntx = 0, cnty = 0;
  int maxv = max(n, m);
  for (int i = 0; i <= n; ++i) f[i][0] = 1;
  for (int i = 1; i <= m; ++i)
    if (!visx[i]) cntx++;
  for (int i = 1; i <= n; ++i)
    if (!visy[i]) cnty++;
  for (int i = 2; i <= n; ++i) {
    for (int j = 1; j <= maxv; ++j) {
      f[i][j] = f[i - 1][j];
      if (!visy[i] && !visy[i - 1]) f[i][j] = (f[i][j] + f[i - 2][j - 1]) % mod;
    }
  }
  for (int i = 0; i <= m; ++i) g[i][0] = 1;
  for (int i = 2; i <= m; ++i) {
    for (int j = 1; j <= maxv; ++j) {
      g[i][j] = g[i - 1][j];
      if (!visx[i] && !visx[i - 1]) g[i][j] = (g[i][j] + g[i - 2][j - 1]) % mod;
    }
  }
  long long ans = 0;
  for (int i = 0; i <= maxv; ++i) {
    for (int j = 0; j <= maxv; ++j) {
      if (2 * i + j <= cntx && 2 * j + i <= cnty)
        ;
      else
        continue;
      long long sum = g[m][i] * f[n][j] % mod;
      sum = (sum * C(cntx - 2 * i, j) % mod) * C(cnty - 2 * j, i) % mod;
      sum = sum * (fac[i] * fac[j] % mod) % mod;
      ans = (ans + sum) % mod;
    }
  }
  printf("%lld\n", ans);
}
int main() {
  init();
  input();
  solve();
  return 0;
}
