#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
long long N = 998244353, M = 31;
long long l, r, n, m, t, k, f, mi = 1e9, x, y, z, ma, x3, x2, y2, r2, fa[36100],
                               c[3610][3610], p[3900];
long long ans;
string s;
int i, j, dp[1810][3610], dp2[1810][3610], d[3610], d2[3610];
bool a[3610], b[3610];
long long voz(long long x, long long y) {
  if (y == 0) return 1;
  if (y == 1) return x;
  if (y % 2 == 0) {
    long long t = voz(x, y / 2);
    return (t * t) % N;
  } else {
    long long t = voz(x, y / 2);
    return ((t * t) % N * x) % N;
  }
}
long long C(long long n, long long k) {
  return (fa[n] * voz((fa[k] * fa[n - k]) % N, N - 2)) % N;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m >> k;
  for (i = 1; i <= k; i++) {
    cin >> x >> y >> l >> r;
    a[x] = 1;
    b[y] = 1;
    a[l] = 1;
    b[r] = 1;
  }
  l = 0;
  r = 0;
  for (i = 1; i <= n; i++)
    if (!a[i]) l++;
  for (i = 1; i <= m; i++)
    if (!b[i]) r++;
  fa[0] = 1;
  for (i = 1; i <= n + m; i++) fa[i] = (fa[i - 1] * i) % N;
  d[0] = 1;
  d2[0] = 1;
  for (i = 1; i <= l / 2; i++) {
    int k = 0;
    if (i == 1) k = 1;
    for (j = 2; j <= n; j++) {
      k = (k + dp[i - 1][j - 2]);
      if (k >= N) k -= N;
      if (!a[j] && !a[j - 1]) dp[i][j] = k;
      d[i] = (d[i] + dp[i][j]);
      if (d[i] >= N) d[i] -= N;
    }
  }
  for (i = 1; i <= r / 2; i++) {
    int k = 0;
    if (i == 1) k = 1;
    for (j = 2; j <= m; j++) {
      k = (k + dp2[i - 1][j - 2]);
      if (k >= N) k -= N;
      if (!b[j] && !b[j - 1]) dp2[i][j] = k;
      d2[i] = (d2[i] + dp2[i][j]);
      if (d2[i] >= N) d2[i] -= N;
    }
  }
  for (i = 1; i <= max(l, r); i++) p[i] = voz(i, N - 2);
  for (i = 0; i <= max(l, r); i++) {
    for (j = 0; j < i; j++) {
      c[i][j] = c[i - 1][j] * (long long)i % N * p[i - j] % N;
    }
    c[i][i] = 1;
  }
  for (i = 0; i <= l / 2; i++) {
    for (j = 0; j <= r / 2; j++) {
      if (i * 2 + j > l || j * 2 + i > r) continue;
      ans = (ans + (long long)d[i] * (long long)d2[j] % N * c[l - 2 * i][j] %
                       N * c[r - 2 * j][i] % N * fa[i] % N * fa[j]) %
            N;
    }
  }
  cout << ans;
}
