#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
using namespace std;
int a, b, c, d, n, m, k, w, h;
bool ur[3602], uc[3602];
int mr[3602][1802], mc[3602][1802];
int ce[3602][3602], fac[3602];
inline void add(int& a, int b) {
  a += b;
  if (a >= 998244353) a -= 998244353;
}
inline void precalc(int n, bool u[], int dp[][1802]) {
  dp[0][0] = 1;
  for (int _n((n)), i(1); i <= _n; i++) {
    for (int _n((i / 2 + 1) - 1), j(0); j <= _n; j++) {
      dp[i][j] = dp[i - 1][j];
      if (i >= 2 && j > 0 && !u[i - 1] && !u[i - 2]) {
        add(dp[i][j], dp[i - 2][j - 1]);
      }
    }
  }
}
int main() {
  scanf("%d%d%d", &h, &w, &n);
  int fh = h, fw = w;
  for (int _n((n)-1), i(0); i <= _n; i++) {
    scanf("%d%d%d%d", &a, &b, &c, &d);
    --a;
    --b;
    --c;
    --d;
    ur[a] = 1;
    ur[c] = 1;
    uc[b] = 1;
    uc[d] = 1;
  }
  fac[0] = 1;
  for (int _n((3600)), i(1); i <= _n; i++) {
    fac[i] = (long long)fac[i - 1] * i % 998244353;
  }
  for (int _n((h)-1), i(0); i <= _n; i++) {
    if (ur[i]) --fh;
  }
  for (int _n((w)-1), i(0); i <= _n; i++) {
    if (uc[i]) --fw;
  }
  precalc(h, ur, mr);
  precalc(w, uc, mc);
  for (int _n((max(w, h) + 1) - 1), i(0); i <= _n; i++) {
    ce[i][0] = ce[i][i] = 1;
    for (int _n((i - 1)), j(1); j <= _n; j++) {
      ce[i][j] = ce[i - 1][j - 1] + ce[i - 1][j];
      if (ce[i][j] >= 998244353) ce[i][j] -= 998244353;
    }
  }
  int ans = 0;
  for (int _n((fh + 1) - 1), hor(0); hor <= _n; hor++) {
    if (hor * 2 > fw) break;
    for (int _n((fw + 1) - 1), ver(0); ver <= _n; ver++) {
      if (hor * 2 + ver > fw) break;
      if (ver * 2 + hor > fh) break;
      int hc = (long long)mr[h][ver] * ce[fh - 2 * ver][hor] % 998244353;
      int vc = (long long)mc[w][hor] * ce[fw - 2 * hor][ver] % 998244353;
      ans = (ans +
             (long long)hc * vc % 998244353 * fac[hor] % 998244353 * fac[ver]) %
            998244353;
    }
  }
  printf("%d\n", ans);
}
