#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char ch = getchar(), w = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * w;
}
void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
inline void writeln(long long x) {
  write(x);
  puts("");
}
const int M = 110;
const int N = 14;
long long f[14][1 << 14];
int n, m, q;
int a[M], b[M], c[M];
bool g[N][N];
bool in(int x, int S) { return (S >> x) & 1; }
long long dfs(int u, int S) {
  if (~f[u][S]) return f[u][S];
  long long &res = f[u][S] = 0;
  int t = 0, st = S ^ (1 << u);
  for (; t < n; ++t)
    if (in(t, st)) break;
  for (int sub = st; sub; sub = (sub - 1) & st)
    if (in(t, sub)) {
      int ct = 0, v = 0;
      for (int i = 0; i < n; ++i)
        if (g[u][i] && in(i, sub)) {
          ++ct;
          v = i;
        }
      if (ct >= 2) continue;
      bool flag = 1;
      for (int i = 0; i < n; ++i)
        if (i != u) {
          for (int j = 0; j < n; ++j)
            if (j != u && g[i][j] && (in(i, sub) ^ in(j, sub))) {
              flag = 0;
              break;
            }
          if (!flag) break;
        }
      if (!flag) continue;
      for (int i = 1; i <= q; ++i) {
        if (c[i] == u && in(a[i], sub) && in(b[i], sub)) {
          flag = 0;
          break;
        }
        if (in(c[i], sub) && (!in(a[i], sub) || !in(b[i], sub))) {
          flag = 0;
          break;
        }
      }
      if (!flag) continue;
      if (ct == 1)
        res += dfs(u, S ^ sub) * dfs(v, sub);
      else
        for (int j = 0; j < n; ++j)
          if (in(j, sub)) res += dfs(u, S ^ sub) * dfs(j, sub);
    }
  return res;
}
int main() {
  n = read(), m = read(), q = read();
  for (int i = 1; i <= m; ++i) {
    int x = read(), y = read();
    g[x - 1][y - 1] = g[y - 1][x - 1] = 1;
  }
  for (int i = 1; i <= q; ++i)
    a[i] = read() - 1, b[i] = read() - 1, c[i] = read() - 1;
  int B = (1 << n);
  memset(f, -1, sizeof f);
  for (int i = 0; i < n; ++i) f[i][1 << i] = 1;
  writeln(dfs(0, B - 1));
  return 0;
}
