#include <bits/stdc++.h>
using namespace std;
const int P = 998244353;
const int N = 3666;
long long qpow(long long a, long long b) {
  long long ans = 1;
  for (; b; b >>= 1, a = a * a % P)
    if (b & 1) ans = ans * a % P;
  return ans;
}
int c[N], r[N], f1[N][N], f2[N][N], fc[N], inv[N];
int main() {
  int h, w, n, r1, r2, c1, c2;
  cin >> h >> w >> n;
  for (int i = (1); i <= (n); ++i)
    cin >> r1 >> c1 >> r2 >> c2, r[r1] = r[r2] = c[c1] = c[c2] = 1;
  int sh = 0, sw = 0;
  for (int i = (1); i <= (h); ++i) sh += r[i];
  for (int i = (1); i <= (w); ++i) sw += c[i];
  int mx = max(h, w);
  fc[0] = 1;
  for (int i = (1); i <= (mx); ++i) fc[i] = (long long)fc[i - 1] * i % P;
  inv[mx] = qpow(fc[mx], P - 2);
  for (int i = (mx - 1); i >= (0); --i)
    inv[i] = (long long)inv[i + 1] * (i + 1) % P;
  for (int i = (0); i <= (h); ++i) f1[i][0] = 1;
  for (int i = (1); i <= (h); ++i)
    for (int j = (1); j <= (h); ++j) {
      if (r[i] || r[i - 1])
        f1[i][j] = f1[i - 1][j];
      else
        f1[i][j] = (f1[i - 1][j] + (i >= 2 ? f1[i - 2][j - 1] : 0)) % P;
    }
  for (int i = (0); i <= (w); ++i) f2[i][0] = 1;
  for (int i = (1); i <= (w); ++i)
    for (int j = (1); j <= (w); ++j) {
      if (c[i] || c[i - 1])
        f2[i][j] = f2[i - 1][j];
      else
        f2[i][j] = (f2[i - 1][j] + (i >= 2 ? f2[i - 2][j - 1] : 0)) % P;
    }
  auto Ch = [&](int n, int m) {
    if (n < 0 || m < 0 || m > n) return 0ll;
    return (long long)((long long)fc[n] * inv[m] % P) * inv[n - m] % P;
  };
  long long ans = 0;
  for (int dh = (0); dh <= (w); ++dh)
    for (int dv = (0); dv <= (h); ++dv)
      if (dv * 2 <= h - sh and dh * 2 <= w - sw) {
        long long R = (long long)f1[h][dv] * Ch(h - sh - 2 * dv, dh) % P;
        long long C = (long long)f2[w][dh] * Ch(w - sw - 2 * dh, dv) % P;
        ans = (ans +
               (long long)(R * C % P) * ((long long)fc[dv] * fc[dh] % P) % P) %
              P;
      }
  cout << ans << "\n";
}
