#include <bits/stdc++.h>
long long int ans, f[2000][2000];
int n, m, k, MAXS, cnt[20][20], state[2000];
inline int count(int x) {
  int re = 0;
  while (x) {
    if (x & 1) re++;
    x = x >> 1;
  }
  return re;
}
int comp(const void *p, const void *q) {
  if (count(*(int *)p) != count(*(int *)q))
    return count(*(int *)p) - count(*(int *)q);
  return (*(int *)p) - (*(int *)q);
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  int i, j, sk, s, u, v;
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &u, &v);
    cnt[u - 1][v - 1]++;
    cnt[v - 1][u - 1]++;
  }
  MAXS = (1 << n) - 1;
  for (i = 1; i <= MAXS; i++) state[i] = i;
  qsort(state + 1, MAXS, sizeof(int), comp);
  for (u = 0; u < n; u++)
    for (v = u + 1; v < n; v++)
      f[(1 << u) | (1 << v)][(1 << u) | (1 << v)] = cnt[u][v];
  for (i = 1; i <= MAXS; i++) {
    s = state[i];
    if (count(s) <= 2) continue;
    for (j = 1; j <= MAXS; j++) {
      sk = state[j];
      if (count(sk) != count(sk & s)) continue;
      for (u = 0; u < n; u++)
        if ((1 << u) & sk) {
          for (v = 0; v < n; v++)
            if (v != u && ((1 << v) & s)) {
              if (((1 << v) & sk)) continue;
              f[sk][s] += f[sk - (1 << u)][s - (1 << u)] * cnt[u][v];
              f[sk][s] += f[sk - (1 << u) + (1 << v)][s - (1 << u)] * cnt[u][v];
            }
        }
      f[sk][s] /= count(sk);
    }
  }
  for (sk = 1; sk <= MAXS; sk++)
    if (count(sk) == k) ans += f[sk][MAXS];
  std::cout << ans;
}
