#include <bits/stdc++.h>
using namespace std;
const int MAXN = 25;
const int MAXM = 1e5 + 5;
const int INF = 1 << 30;
const int mod = 1000000009;
int lowbit(int x) { return x & (-x); }
int fast_power(int a, int b) {
  int x;
  for (x = 1; b; b >>= 1) {
    if (b & 1) x = 1ll * x * a % mod;
    a = 1ll * a * a % mod;
  }
  return x % mod;
}
struct node {
  int x, y, z;
} a[MAXM], b[MAXM];
int n, m, k;
long long dp[MAXN][MAXM];
bool in(int i, int j) { return (1 << (i - 1)) & j; }
long long dfs(int u, int tmp) {
  if (tmp == (1 << (u - 1))) return 1;
  long long& q = dp[u][tmp];
  if (q != -1) return q;
  q = 0;
  int pos;
  for (int i = 1; i <= n; i++) {
    if (i != u && in(i, tmp)) {
      pos = i;
      break;
    }
  }
  for (int subtmp = tmp; subtmp; subtmp = (subtmp - 1) & tmp) {
    if (in(u, subtmp) || !in(pos, subtmp)) continue;
    int flag = 1, cnt = 0, id;
    for (int i = 1; i <= m; i++) {
      int x = a[i].x, y = a[i].y;
      if (x == u || y == u) {
        if (y == u) swap(x, y);
        if (!in(y, subtmp)) continue;
        cnt++;
        id = y;
        continue;
      }
      if (in(x, subtmp) ^ in(y, subtmp)) {
        flag = 0;
        break;
      }
    }
    if (cnt > 1) continue;
    if (!flag) continue;
    for (int i = 1; i <= k; i++) {
      int x = b[i].x, y = b[i].y, z = b[i].z;
      if (in(x, subtmp) && in(y, subtmp) && !(in(z, subtmp))) {
        flag = 0;
        break;
      }
      if ((!in(x, subtmp) || !in(y, subtmp)) && (in(z, subtmp))) {
        flag = 0;
        break;
      }
    }
    if (!flag) continue;
    if (cnt)
      q += dfs(id, subtmp) * dfs(u, tmp ^ subtmp);
    else {
      for (int i = 1; i <= n; i++) {
        if (!in(i, subtmp)) continue;
        q += dfs(i, subtmp) * dfs(u, tmp ^ subtmp);
      }
    }
  }
  return q;
}
int main() {
  memset(dp, -1, sizeof(dp));
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; i++) scanf("%d%d", &a[i].x, &a[i].y);
  for (int i = 1; i <= k; i++) scanf("%d%d%d", &b[i].x, &b[i].y, &b[i].z);
  long long ans = dfs(1, (1 << n) - 1);
  printf("%lld\n", ans);
  return 0;
}
