#include <bits/stdc++.h>
using namespace std;
int R, C, n, ans, fx[4010], fy[4010], f[4010][4010], g[4010][4010];
long long fac[4010], inv[4010];
const int maxn = 4000;
void add(int &a, int b) {
  a += b;
  if (a >= 998244353) a -= 998244353;
}
long long Pow(long long a, int b) {
  long long res = 1;
  while (b) {
    if (b & 1) res = res * a % 998244353;
    a = a * a % 998244353;
    b >>= 1;
  }
  return res;
}
long long c(int a, int b) {
  if (a < b) return 0;
  return fac[a] * inv[a - b] % 998244353 * inv[b] % 998244353;
}
int main() {
  int X1, Y1, X2, Y2;
  scanf("%d%d%d", &R, &C, &n);
  fac[0] = 1;
  for (int i = 1; i <= maxn; i++) fac[i] = fac[i - 1] * i % 998244353;
  inv[maxn] = Pow(fac[maxn], 998244353 - 2);
  for (int i = maxn; i; i--) inv[i - 1] = inv[i] * i % 998244353;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d%d%d", &X1, &Y1, &X2, &Y2);
    fx[X1] = 1;
    fy[Y1] = 1;
    fx[X2] = 1;
    fy[Y2] = 1;
  }
  f[0][0] = 1;
  g[0][0] = 1;
  for (int i = 1; i <= R; i++)
    for (int j = 0; j <= i; j++) {
      f[i][j] = f[i - 1][j];
      if (i > 1 && j && !fx[i] && !fx[i - 1]) add(f[i][j], f[i - 2][j - 1]);
    }
  for (int i = 1; i <= C; i++)
    for (int j = 0; j <= i; j++) {
      g[i][j] = g[i - 1][j];
      if (i > 1 && j && !fy[i] && !fy[i - 1]) add(g[i][j], g[i - 2][j - 1]);
    }
  int rr = R, cc = C;
  for (int i = 1; i <= rr; i++) R -= fx[i];
  for (int i = 1; i <= cc; i++) C -= fy[i];
  for (int i = 0; i <= R; i++)
    for (int j = 0; j <= C; j++)
      add(ans, f[rr][i] * c(C - 2 * j, i) % 998244353 * g[cc][j] % 998244353 *
                   c(R - 2 * i, j) % 998244353 * fac[i] % 998244353 * fac[j] %
                   998244353);
  printf("%d\n", ans);
  return 0;
}
