#include <bits/stdc++.h>
using namespace std;
int n, m, q;
int a[22][22], b[22][22];
long long dp[14][1 << 14];
int ned[14];
int ned2[14];
int lca[1 << 14];
bool in(int x, int y) { return (x | y) == y; }
long long dfs(int rt, int cur) {
  long long &t = dp[rt][cur];
  if (t >= 0) return t;
  t = 0;
  if (!in(lca[cur], cur)) return t;
  if (cur == (1 << rt)) return t = 1;
  int cs = -1;
  for (int i = 0; i < n; i++) {
    if (i != rt && (cur >> i & 1) && a[rt][i]) {
      cs = i;
      break;
    }
  }
  if (cs != -1) {
    int S = cur ^ (1 << rt) ^ (1 << cs);
    for (int i = S; i >= 0; i--) {
      i = i & S;
      int t1 = i | (1 << cs);
      int t2 = (S ^ i) | (1 << rt);
      if (in(ned[cs], t1) && in(ned2[cs] ^ (1 << rt), t1)) {
        t += dfs(cs, t1) * dfs(rt, t2);
      }
    }
  } else {
    int tp = __builtin_ctz(cur ^ (1 << rt));
    for (cs = 0; cs < n; cs++) {
      if (cs != rt && (cur >> cs & 1)) {
        int S = cur ^ (1 << rt) ^ (1 << cs);
        for (int i = S; i >= 0; i--) {
          i = i & S;
          int t1 = i | (1 << cs);
          int t2 = (S ^ i) | (1 << rt);
          if (in(1 << tp, t1) && in(ned[cs], t1) && in(ned2[cs], t1)) {
            t += dfs(cs, t1) * dfs(rt, t2);
          }
        }
      }
    }
  }
  return t;
}
int main() {
  cin >> n >> m >> q;
  for (int i = 0; i < n; i++) ned[i] |= 1 << i, ned2[i] = ned[i];
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--, v--;
    a[u][v] = a[v][u] = 1;
    ned2[u] |= 1 << v;
    ned2[v] |= 1 << u;
  }
  memset(b, -1, sizeof(b));
  memset(dp, -1, sizeof(dp));
  for (int i = 0; i < q; i++) {
    int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    u--, v--, w--;
    if (u == v) {
      if (w != u) {
        puts("0");
        return 0;
      }
      continue;
    }
    if (b[u][v] != -1) {
      if (b[u][v] != w) {
        puts("0");
        return 0;
      }
      continue;
    }
    b[u][v] = b[v][u] = w;
    ned[w] |= 1 << u;
    ned[w] |= 1 << v;
  }
  for (int i = 0; i < (1 << n) - 1; i++) {
    for (int j = 0; j < n; j++) {
      for (int k = j + 1; k < n; k++) {
        if ((i >> j & 1) && (i >> k & 1) && b[j][k] != -1) {
          lca[i] |= 1 << b[j][k];
        }
      }
    }
  }
  cout << dfs(0, (1 << n) - 1) << endl;
}
