#include <bits/stdc++.h>
using namespace std;
const int N = 3610, mod = 998244353;
template <typename T>
void read(T &x) {
  int ch = getchar();
  x = 0;
  for (; ch < '0' || ch > '9'; ch = getchar())
    ;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}
void qmo(int &x) { x += x >> 31 & mod; }
int ksm(int a, int b) {
  int res = 1;
  for (; b; b >>= 1, a = (long long)a * a % mod)
    if (b & 1) res = (long long)res * a % mod;
  return res;
}
int n, m, k, cnt1, cnt2, f[N][N >> 1], g[N][N >> 1], fac[N], inv[N], ans;
bool vis1[N], vis2[N];
void init(int n) {
  fac[0] = 1;
  for (int i = 1; i <= n; ++i) fac[i] = (long long)fac[i - 1] * i % mod;
  inv[n] = ksm(fac[n], mod - 2);
  for (int i = n; i; --i) inv[i - 1] = (long long)inv[i] * i % mod;
}
int main() {
  read(n);
  read(m);
  read(k);
  for (int i = 1, a1, b1, a2, b2; i <= k; ++i) {
    read(a1);
    read(b1);
    read(a2);
    read(b2);
    vis1[a1] = vis1[a2] = vis2[b1] = vis2[b2] = true;
  }
  init(max(n, m));
  for (int i = 0; i <= n; ++i) f[i][0] = 1;
  for (int i = 1; i <= n; ++i)
    if (!vis1[i]) ++cnt1;
  for (int i = 0; i <= m; ++i) g[i][0] = 1;
  for (int i = 1; i <= m; ++i)
    if (!vis2[i]) ++cnt2;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= (i >> 1); ++j) {
      f[i][j] = f[i - 1][j];
      if (j && !vis1[i] && !vis1[i - 1]) qmo(f[i][j] += f[i - 2][j - 1] - mod);
    }
  for (int i = 1; i <= m; ++i)
    for (int j = 1; j <= (i >> 1); ++j) {
      g[i][j] = g[i - 1][j];
      if (j && !vis2[i] && !vis2[i - 1]) qmo(g[i][j] += g[i - 2][j - 1] - mod);
    }
  for (int i = 0; (i << 1) <= cnt1; ++i)
    for (int j = 0; (i << 1) + j <= cnt1 && (j << 1) + i <= cnt2; ++j)
      ans = (ans + (long long)f[n][i] * g[m][j] % mod * fac[cnt2 - (j << 1)] %
                       mod * inv[cnt2 - (j << 1) - i] % mod *
                       fac[cnt1 - (i << 1)] % mod * inv[cnt1 - (i << 1) - j]) %
            mod;
  printf("%d\n", ans);
}
