#include <bits/stdc++.h>
using namespace std;
const int maxn = 3600;
const int mod = 998244353;
int n, m, k;
bool vis[3605], vst[3605];
int f[3605][3605], g[3605][3605], num1, num2;
long long fir[3605], inv[3605];
long long ksm(long long x, long long n) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = ans * x % mod;
    x = x * x % mod;
    n >>= 1;
  }
  return ans;
}
void pre() {
  fir[0] = 1;
  for (int i = 1; i <= maxn; i++) fir[i] = fir[i - 1] * i % mod;
  inv[maxn] = ksm(fir[maxn], mod - 2);
  for (int i = maxn - 1; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
}
long long C(int n, int m) {
  if (n < m) return 0;
  return fir[n] * inv[m] % mod * inv[n - m] % mod;
}
int main() {
  pre();
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= k; i++) {
    int x, y, x2, y2;
    scanf("%d%d%d%d", &x, &y, &x2, &y2);
    vis[x] = vis[x2] = 1;
    vst[y] = vst[y2] = 1;
  }
  for (int i = 1; i <= n; i++)
    if (!vis[i]) num1++;
  for (int i = 1; i <= m; i++)
    if (!vst[i]) num2++;
  f[0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= num1 / 2; j++) {
      f[i][j] = f[i - 1][j];
      if (i >= 2 && !vis[i] && !vis[i - 1])
        f[i][j] = (f[i][j] + f[i - 2][j - 1]) % mod;
    }
  g[0][0] = 1;
  for (int i = 1; i <= m; i++)
    for (int j = 0; j <= num2 / 2; j++) {
      g[i][j] = g[i - 1][j];
      if (i >= 2 && !vst[i] && !vst[i - 1])
        g[i][j] = (g[i][j] + g[i - 2][j - 1]) % mod;
    }
  long long ans = 0;
  for (int i = 0; i <= num1 / 2; i++)
    for (int j = 0; j <= num2 / 2; j++)
      ans = (ans + 1ll * f[n][i] * g[m][j] % mod * C(num1 - 2 * i, j) % mod *
                       C(num2 - 2 * j, i) % mod * fir[i] % mod * fir[j] % mod) %
            mod;
  printf("%lld\n", ans);
}
