#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const int MOD = 998244353;
const int N = 3605;
int n, m, k, i, j, a, b, c, d, row[N], col[N], sRow, sCol, posRow[N][N],
    posCol[N][N], act, res, sil[N], comb[N][N];
void robKombinacje(int n) {
  for (int i = 0; i <= n; i++) comb[i][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++)
      comb[i][j] = (comb[i - 1][j - 1] + comb[i - 1][j]) % MOD;
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  sil[0] = sil[1] = 1;
  for (i = 2; i <= max(n, m) / 2; i++) sil[i] = (sil[i - 1] * 1LL * i) % MOD;
  robKombinacje(max(n, m));
  while (k--) {
    scanf("%d %d %d %d", &a, &b, &c, &d);
    row[a] = row[c] = 1;
    col[b] = col[d] = 1;
  }
  sRow = sCol = 0;
  for (i = 1; i <= n; i++)
    if (!row[i]) sRow++;
  for (i = 1; i <= m; i++)
    if (!col[i]) sCol++;
  posRow[0][0] = 1;
  for (i = 1; i <= n; i++) {
    for (j = 0; j <= i / 2; j++) posRow[i][j] = posRow[i - 1][j];
    if (i >= 2 && !row[i] && !row[i - 1]) {
      for (j = 0; j < i / 2; j++)
        posRow[i][j + 1] = (posRow[i][j + 1] + posRow[i - 2][j]) % MOD;
    }
  }
  posCol[0][0] = 1;
  for (i = 1; i <= m; i++) {
    for (j = 0; j <= i / 2; j++) posCol[i][j] = posCol[i - 1][j];
    if (i >= 2 && !col[i] && !col[i - 1]) {
      for (j = 0; j < i / 2; j++)
        posCol[i][j + 1] = (posCol[i][j + 1] + posCol[i - 2][j]) % MOD;
    }
  }
  res = 0;
  for (i = 0; i <= n; i++)
    for (j = 0; j <= m; j++)
      if (posRow[n][j] > 0 && posCol[m][i] > 0 && i + j * 2 <= sRow &&
          j + i * 2 <= sCol) {
        act = (posRow[n][j] * 1LL * comb[sRow - 2 * j][i]) % MOD;
        act = (posCol[m][i] * 1LL * act) % MOD;
        act = (comb[sCol - 2 * i][j] * 1LL * act) % MOD;
        act = (sil[i] * 1LL * act) % MOD;
        act = (sil[j] * 1LL * act) % MOD;
        res = (res + act) % MOD;
      }
  printf("%d\n", res);
  return 0;
}
