#include <bits/stdc++.h>
using namespace std;
const int P = 998244353;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long qpow(long long a, long long n) {
  long long r = 1 % P;
  for (a %= P; n; a = a * a % P, n >>= 1)
    if (n & 1) r = r * a % P;
  return r;
}
long long inv(long long first) {
  return first <= 1 ? 1 : inv(P % first) * (P - P / first) % P;
}
inline int rd() {
  int first = 0;
  char p = getchar();
  while (p < '0' || p > '9') p = getchar();
  while (p >= '0' && p <= '9') first = first * 10 + p - '0', p = getchar();
  return first;
}
const int N = 4e3 + 10, M = 1e6 + 10;
int n, k, m, C[N][N], fac[M];
int va[N], vb[N], fa[N][N], fb[N][N];
int main() {
  fac[0] = 1;
  for (int i = 1; i <= M - 1; ++i) fac[i] = (long long)fac[i - 1] * i % P;
  for (int i = 0; i <= N - 1; ++i) {
    C[i][0] = 1;
    for (int j = 1; j <= i; ++j) C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % P;
  }
  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);
    va[x1] = va[x2] = vb[y1] = vb[y2] = 1;
  }
  int tota = 0, totb = 0;
  for (int i = 1; i <= n; ++i) tota += !va[i];
  for (int i = 1; i <= m; ++i) totb += !vb[i];
  fa[0][0] = 1;
  for (int i = 1; i <= n; ++i) {
    memcpy(fa[i], fa[i - 1], sizeof fa[0]);
    if (i > 1 && !va[i] && !va[i - 1]) {
      for (int j = 1; j <= tota / 2; ++j)
        fa[i][j] = (fa[i][j] + fa[i - 2][j - 1]) % P;
    }
  }
  fb[0][0] = 1;
  for (int i = 1; i <= m; ++i) {
    memcpy(fb[i], fb[i - 1], sizeof fb[0]);
    if (i > 1 && !vb[i] && !vb[i - 1]) {
      for (int j = 1; j <= totb / 2; ++j)
        fb[i][j] = (fb[i][j] + fb[i - 2][j - 1]) % P;
    }
  }
  int ans = 0;
  for (int i = 0; i <= tota / 2; ++i)
    for (int j = 0; j <= totb / 2; ++j) {
      int first = (long long)fa[n][i] * C[totb - 2 * j][i] % P * fac[i] % P;
      int second = (long long)fb[m][j] * C[tota - 2 * i][j] % P * fac[j] % P;
      ans = (ans + (long long)first * second) % P;
    }
  printf("%d\n", ans);
}
