#include <bits/stdc++.h>
using namespace std;
const int N = 3601;
const int mod = 998244353;
int n, m, k, cntx, cnty;
long long f[N][N], g[N][N], fac[N], inv[N], ans;
bool visx[N], visy[N];
inline long long C(int n, int m) {
  if (n < m) return 0;
  return fac[n] * inv[n - m] % mod;
}
inline void prework() {
  fac[0] = fac[1] = inv[0] = inv[1] = 1;
  for (int i = 2; i < N; i++) fac[i] = fac[i - 1] * i % mod;
  for (int i = 2; i < N; i++) inv[i] = (mod - mod / i) * inv[mod % i] % mod;
  for (int i = 2; i < N; i++) inv[i] = inv[i] * inv[i - 1] % mod;
  return;
}
inline bool checkx(int x) { return (!visx[x - 1]) && (!visx[x]); }
inline bool checky(int x) { return (!visy[x - 1]) && (!visy[x]); }
int main() {
  prework();
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= k; i++) {
    int x1, y1, x2, y2;
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
    visx[x1] = visx[x2] = true;
    visy[y1] = visy[y2] = true;
  }
  for (int i = 1; i <= n; i++) {
    if (visx[i]) continue;
    cntx++;
  }
  for (int i = 1; i <= m; i++) {
    if (visy[i]) continue;
    cnty++;
  }
  int ix = floor(cntx / 2), iy = floor(cnty / 2);
  f[0][0] = g[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= ix; j++) {
      f[i][j] = f[i - 1][j] % mod;
      if (!checkx(i)) continue;
      if (j && i >= 2) {
        f[i][j] += f[i - 2][j - 1];
        f[i][j] %= mod;
      }
    }
  }
  for (int i = 1; i <= m; i++) {
    for (int j = 0; j <= iy; j++) {
      g[i][j] = g[i - 1][j];
      if (!checky(i)) continue;
      if (j && i >= 2) {
        g[i][j] += g[i - 2][j - 1];
        g[i][j] %= mod;
      }
    }
  }
  for (int i = 0; i <= ix; i++) {
    for (int j = 0; j <= iy; j++) {
      ans += f[n][i] * g[m][j] % mod * C(cntx - 2 * i, j) % mod *
             C(cnty - 2 * j, i) % mod;
      ans %= mod;
    }
  }
  printf("%lld\n", ans);
  return 0;
}
