#include <bits/stdc++.h>
using namespace std;
struct query {
  int x, y, k;
} Q[110];
list<int> G[1 << 13];
long long F[15][2][1 << 13];
int Adj[15], Lca[15], I[15][1 << 13];
int n, m, q;
inline int getbit(int x, int i) { return (x >> i) & 1; }
void make_g(int s, int f = 0, int i = n - 1, bool ok = false) {
  if (i < 0) {
    if (f) G[s].emplace_back(f);
  } else if (getbit(s, i)) {
    make_g(s, f | (1 << i), i - 1, true);
    if (ok) make_g(s, f, i - 1, true);
  } else
    make_g(s, f, i - 1, ok);
}
long long cal(int x, int k, int s) {
  if (k) {
    if ((s | Lca[x]) != s) return 0;
    if (x != 1 && __builtin_popcount(Adj[x] - (Adj[x] & s)) > 1) return 0;
  }
  if (s == 0) return 1;
  if (F[x][k][s] >= 0) return F[x][k][s];
  long long v = 0;
  for (int f : G[s])
    if (I[x][f] > n) {
      for (int y = 1; y <= n; ++y)
        if (getbit(f, y - 1)) {
          int yf = f - (1 << (y - 1));
          if ((yf | Adj[y]) == yf) v += cal(y, 1, yf) * cal(x, 0, s - f);
        }
    } else if (I[x][f] > 0)
      v += cal(I[x][f], 1, f - (1 << (I[x][f] - 1))) * cal(x, 0, s - f);
  return F[x][k][s] = v;
}
void enter() {
  cin >> n >> m >> q;
  for (int i = 1; i <= m; ++i) {
    int x, y;
    cin >> x >> y;
    Adj[x] |= 1 << (y - 1);
    Adj[y] |= 1 << (x - 1);
  }
  for (int i = 1; i <= q; ++i) {
    auto &p = Q[i];
    cin >> p.x >> p.y >> p.k;
    if (p.x != p.k) Lca[p.k] |= 1 << (p.x - 1);
    if (p.y != p.k) Lca[p.k] |= 1 << (p.y - 1);
  }
}
void init() {
  for (int s = 1; s < 1 << n; ++s) make_g(s);
  for (int x = 1; x <= n; ++x)
    for (int f = 0; f < 1 << n; ++f) {
      if (__builtin_popcount(Adj[x] & f) > 1) continue;
      int i;
      for (i = 1; i <= q; ++i)
        if (Q[i].k == x && getbit(f, Q[i].x - 1) && getbit(f, Q[i].y - 1))
          break;
      if (i <= q) continue;
      if (Adj[x] & f)
        I[x][f] = __builtin_ffs(Adj[x] & f);
      else
        I[x][f] = n + 1;
    }
}
void solve() {
  fill(F[1][0], F[n + 1][0], -1);
  cout << cal(1, 1, (1 << n) - 2);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  if (ifstream("test.inp")) cin.rdbuf((new ifstream("test.inp"))->rdbuf());
  enter();
  init();
  solve();
}
