#include <bits/stdc++.h>
using namespace std;
template <class T>
void chmin(T& a, const T& b) {
  if (a > b) a = b;
}
template <class T>
void chmax(T& a, const T& b) {
  if (a < b) a = b;
}
int n, m, q;
int g[15][15];
int lca[15][15];
long long dp[15][1 << 13];
string f(int x) {
  string s;
  string one = "1";
  string zero = "0";
  for (int i = 0; i < n; i++) {
    if (x & (1 << i))
      s += one;
    else
      s += zero;
  }
  return s;
}
long long rec(int root, int use) {
  if (dp[root][use] != -1) return dp[root][use];
  vector<int> rem, mask;
  for (int i = 0; i < n; i++) {
    if (i == root) continue;
    if (use & (1 << i)) {
      rem.push_back(i);
      mask.push_back(1 << i);
    }
  }
  if (((int)(rem).size()) == 0) {
    return dp[root][use] = 1ll;
  }
  long long res = 0ll;
  for (int i = 1; i < (1 << ((int)(rem).size())); i++) {
    if (!(i & 1)) continue;
    int ch = 0;
    for (int j = 0; j < rem.size(); j++)
      if (i & (1 << j)) ch += mask[j];
    bool ok = true;
    for (int j = 0; j < n; j++) {
      for (int k = 0; k < n; k++) {
        if (ch & (1 << j) && ch & (1 << k)) {
          if (lca[j][k] != -1 && (use - ch) & (1 << lca[j][k])) {
            ok = false;
          }
        }
      }
    }
    for (int j = 0; j < n; j++) {
      for (int k = 0; k < n; k++) {
        if (ch & (1 << j) && (use - ch) & (1 << k)) {
          if (lca[j][k] != -1 && lca[j][k] != root) {
            ok = false;
          }
        }
      }
    }
    for (int j = 0; j < n; j++) {
      for (int k = 0; k < n; k++) {
        if (k == root) continue;
        if (ch & (1 << j) && (use - ch) & (1 << k)) {
          if (g[j][k] == 1) ok = false;
        }
      }
    }
    int cnt = 0, cand = -1;
    for (int j = 0; j < rem.size(); j++) {
      if (i & (1 << j) && g[root][rem[j]] == 1) {
        cand = rem[j];
        cnt++;
      }
    }
    if (cnt > 1) ok = false;
    if (!ok) continue;
    for (int j = 0; j < rem.size(); j++) {
      if (i & (1 << j)) {
        if (cand != -1 && cand != rem[j]) continue;
        res += rec(root, use - ch) * rec(rem[j], ch);
      }
    }
  }
  return dp[root][use] = res;
}
int main() {
  scanf("%d %d %d", &n, &m, &q);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    u--;
    v--;
    g[u][v] = 1;
    g[v][u] = 1;
  }
  memset(lca, -1, sizeof(lca));
  for (int i = 0; i < n; i++) lca[i][i] = i;
  for (int i = 0; i < q; i++) {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    a--;
    b--;
    c--;
    if (lca[a][b] != -1 && lca[a][b] != c) {
      printf("0\n");
      return 0;
    }
    lca[a][b] = c;
    lca[b][a] = c;
  }
  memset(dp, -1, sizeof(dp));
  cout << rec(0, ((1 << n) - 1)) << endl;
  return 0;
}
