#include <bits/stdc++.h>
using namespace std;
const int maxn = 200;
int a[maxn], b[maxn], c[maxn], u[maxn], v[maxn];
int n, m, q, ok[1 << 13], chief[1 << 13];
long long dp[1 << 13];
long long child[1 << 13][14];
bool in(int mask, int i) { return (mask >> i) & 1; }
int calc(int mask) {
  for (int i = 1; i <= q; i++) {
    if (in(mask, c[i])) {
      if (!in(mask, a[i]) || !in(mask, b[i])) return -1;
    }
    if (in(mask, a[i]) && in(mask, b[i]) && !in(mask, c[i])) return -1;
  }
  int ret = 0;
  for (int i = 1; i <= m; i++) {
    if (in(mask, u[i]) && in(mask, v[i])) continue;
    if (!in(mask, u[i]) && !in(mask, v[i])) continue;
    if (in(mask, u[i]) && !in(mask, v[i])) {
      if (ret != 0) return -1;
      ret = i;
    } else {
      if (ret != 0) return -1;
      ret = i;
    }
  }
  return ret;
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= m; i++) scanf("%d%d", &u[i], &v[i]), u[i]--, v[i]--;
  for (int i = 1; i <= q; i++)
    scanf("%d%d%d", &a[i], &b[i], &c[i]), a[i]--, b[i]--, c[i]--;
  for (int i = 0; i < 1 << n; i++) ok[i] = calc(i);
  for (int i = 1; i < 1 << n; i++) {
    for (int j = 0; j < n; j++)
      if (in(i, j)) chief[i] = j;
  }
  dp[0] = 1;
  for (int i = 0; i < n; i++) child[0][i] = 1;
  for (int i = 1; i < 1 << n; i++) {
    dp[i] = 0;
    for (int rt = 0; rt < n; rt++) {
      if (!in(i, rt)) continue;
      if (ok[i] == -1) continue;
      if (ok[i] == 0 || u[ok[i]] == rt || v[ok[i]] == rt) {
        dp[i] += child[i - (1 << rt)][rt];
      }
    }
    for (int rt = 0; rt < n; rt++) {
      child[i][rt] = 0;
      if (in(i, rt)) continue;
      for (int j = i; j > 0; j = (j - 1) & i) {
        if (!in(j, chief[i])) continue;
        if (ok[j] == -1) continue;
        if (ok[j] == 0 || u[ok[j]] == rt || v[ok[j]] == rt) {
          child[i][rt] += child[i - j][rt] * dp[j];
        }
      }
    }
  }
  if (ok[(1 << n) - 1] == -1) {
    printf("0\n");
    return 0;
  }
  cout << child[(1 << n) - 1 - 1][0] << endl;
  return 0;
}
