#include <bits/stdc++.h>
using namespace std;
template <class t>
inline t read(t &x) {
  char c = getchar();
  bool f = 0;
  x = 0;
  while (!isdigit(c)) f |= c == '-', c = getchar();
  while (isdigit(c)) x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
  if (f) x = -x;
  return x;
}
template <class t>
inline void write(t x) {
  if (x < 0)
    putchar('-'), write(-x);
  else {
    if (x > 9) write(x / 10);
    putchar('0' + x % 10);
  }
}
long long const N = 105;
long long n, m, q, dp[14][1 << 13], a[N], b[N], c[N], u[N], v[N];
long long dfs(long long now, long long s) {
  if (~dp[now][s]) return dp[now][s];
  long long flag = s ^ (1 << (now - 1));
  dp[now][s] = 0;
  long long moved = 1;
  while (!(flag & (1 << moved - 1))) moved++;
  for (long long k = flag; k; k = (k - 1) & flag) {
    long long cnt = 0, to = 0;
    if (!(k & (1 << (moved - 1)))) continue;
    for (long long i = 1; i <= q; i++)
      if (now == c[i] && (k & (1 << (a[i] - 1))) && (k & (1 << (b[i] - 1))))
        goto fail;
    for (long long i = 1; i <= q; i++) {
      if ((k & (1 << (c[i] - 1)))) {
        if (!(k & (1 << (a[i] - 1))) || !(k & (1 << (b[i] - 1)))) goto fail;
      }
    }
    for (long long i = 1; i <= m; i++) {
      if (u[i] == now || v[i] == now) continue;
      if ((k & (1 << (u[i] - 1))) && !(k & (1 << (v[i] - 1)))) goto fail;
      if (!(k & (1 << (u[i] - 1))) && (k & (1 << (v[i] - 1)))) goto fail;
    }
    for (long long i = 1; i <= m; i++) {
      if (u[i] == now) {
        if ((k & (1 << (v[i] - 1)))) cnt++, to = v[i];
      } else if (v[i] == now) {
        if ((k & (1 << (u[i] - 1)))) cnt++, to = u[i];
      }
    }
    if (cnt == 0) {
      for (long long i = 1; i <= n; i++) {
        if ((k & (1 << (i - 1)))) {
          dp[now][s] += dfs(i, k) * dfs(now, flag ^ k ^ (1 << (now - 1)));
        }
      }
    } else if (cnt == 1) {
      dp[now][s] += dfs(to, k) * dfs(now, flag ^ k ^ (1 << (now - 1)));
    }
  fail:;
  }
  return dp[now][s];
}
signed main() {
  read(n), read(m), read(q);
  memset(dp, -1, sizeof dp);
  for (long long i = 1; i <= n; i++) dp[i][1 << (i - 1)] = 1;
  for (long long i = 1; i <= m; i++) read(u[i]), read(v[i]);
  for (long long i = 1; i <= q; i++) read(a[i]), read(b[i]), read(c[i]);
  dfs(1, (1 << n) - 1);
  write(dp[1][(1 << n) - 1]);
  return 0;
}
