#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
bool R[3605], C[3605];
int dp[3605][3605];
int H[3605], W[3605];
long long f[3605], comb[3605][3605];
int main() {
  f[0] = 1;
  for (int i = 1; i <= 3600; i++) f[i] = f[i - 1] * i % mod;
  comb[0][0] = 1;
  for (int i = 1; i <= 3600; i++) {
    comb[i][0] = comb[i][i] = 1;
    for (int j = 1; j < i; j++)
      comb[i][j] = (comb[i - 1][j] + comb[i - 1][j - 1]) % mod;
  }
  int h, w, n;
  scanf("%d%d%d", &h, &w, &n);
  int x = h, y = w;
  for (int i = 1; i <= n; i++) {
    int r1, c1, r2, c2;
    scanf("%d%d%d%d", &r1, &c1, &r2, &c2);
    if (r1 == r2) {
      x--;
      y -= 2;
    } else {
      y--;
      x -= 2;
    }
    R[r1] = 1;
    R[r2] = 1;
    C[c1] = 1;
    C[c2] = 1;
  }
  memset(dp, 0, sizeof(dp));
  dp[0][0] = 1;
  for (int i = 1; i <= h; i++) {
    if (i > 1) {
      for (int j = 0; j <= h; j++) {
        if (!R[i] && !R[i - 1])
          dp[i][j + 1] = (dp[i][j + 1] + dp[i - 2][j]) % mod;
      }
    }
    for (int j = 0; j <= h; j++) dp[i][j] = (dp[i][j] + dp[i - 1][j]) % mod;
  }
  for (int j = 0; j <= h; j++) H[j] = dp[h][j];
  memset(dp, 0, sizeof(dp));
  dp[0][0] = 1;
  for (int i = 1; i <= w; i++) {
    if (i > 1) {
      for (int j = 0; j <= w; j++) {
        if (!C[i] && !C[i - 1])
          dp[i][j + 1] = (dp[i][j + 1] + dp[i - 2][j]) % mod;
      }
    }
    for (int j = 0; j <= w; j++) dp[i][j] = (dp[i][j] + dp[i - 1][j]) % mod;
  }
  for (int j = 0; j <= w; j++) W[j] = dp[w][j];
  long long ans = 0;
  for (int i = 0; i <= h; i++) {
    if (H[i] == 0) continue;
    for (int j = 0; j <= w; j++) {
      if (W[j] == 0) continue;
      if (x - j - 2 * i < 0 || y - i - 2 * j < 0) continue;
      long long res = H[i] * comb[y - 2 * j][i] % mod * f[i] % mod;
      res = res * W[j] % mod * comb[x - 2 * i][j] % mod * f[j] % mod;
      ans = (ans + res) % mod;
    }
  }
  printf("%lld\n", ans);
}
