#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  long long r;
  while (b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
const int MOD = (int)1e9 + 7;
const int INF = (int)1e9;
const long long LINF = (long long)1e18;
const long double PI = 2 * acos(0);
const int maxn = 15;
int n, m, q;
vector<int> adj[maxn];
vector<pair<int, int> > lca[maxn];
vector<int> submsk[1 << maxn];
long long f[maxn][maxn][1 << maxn];
int bit(int n, int k) { return (n & (1 << k)) > 0; }
int check(int u, int v, int msk) {
  for (int i = (0); i < (int((adj[u]).size())); i++) {
    int w = adj[u][i];
    if (bit(msk, w)) return 0;
  }
  for (int i = (0); i < (int((lca[u]).size())); i++) {
    int a = lca[u][i].first;
    int b = lca[u][i].second;
    if (bit(msk | (1 << v), a) && bit(msk | (1 << v), b)) return 0;
  }
  for (int i = (0); i < (int((adj[v]).size())); i++) {
    int w = adj[v][i];
    if (w != u && !bit(msk, w)) return 0;
  }
  for (int i = (0); i < (int((lca[v]).size())); i++) {
    int a = lca[v][i].first;
    int b = lca[v][i].second;
    if (!bit(msk | (1 << v), a) || !bit(msk | (1 << v), b)) return 0;
  }
  return 1;
}
long long calc(int u, int prv, int msk) {
  if (!msk) return 1;
  long long& res = f[u][prv][msk];
  if (~res) return res;
  res = 0;
  for (int i = (prv + 1); i < (n); i++)
    if (bit(msk, i)) {
      int t = msk ^ (1 << i);
      for (int j = (0); j < (int((submsk[t]).size())); j++) {
        int _msk = submsk[t][j];
        if (check(u, i, _msk))
          res += calc(i, 0, _msk) * calc(u, i, msk ^ _msk ^ (1 << i));
      }
      return res = res + calc(u, i, msk);
    }
  return res;
}
void solve() {
  memset(f, -1, sizeof(f));
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 0; i < (1 << n); i += 2) {
    for (int j = 0; j < (1 << n); j += 2) {
      if ((i & j) == j) {
        submsk[i].push_back(j);
      }
    }
  }
  for (int i = (0); i < (m); i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--;
    v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  for (int i = (0); i < (q); i++) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    a--;
    b--;
    c--;
    lca[c].push_back(make_pair(a, b));
  }
  printf("%I64d", calc(0, 0, ((1 << n) - 1) ^ 1));
}
int main() {
  solve();
  return 0;
}
