#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int Graph[1025][1025], f[1025][1025];
int Tj(int x) {
  int tot = 0;
  while (x) tot++, x -= x & (-x);
  return tot;
}
void read(int &x) {
  x = 0;
  char c = getchar();
  int f = 1;
  while (c < '0' || c > '9') {
    if (c == '-') f = -f;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 3) + (x << 1) + c - '0';
    c = getchar();
  }
  x *= f;
  return;
}
void write(int x) {
  if (x < 0) {
    x = -x;
    putchar('-');
  }
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
signed main() {
  read(n), read(m), read(k);
  for (register int i = 1; i <= m; ++i) {
    int u, v;
    read(u), read(v);
    u--, v--;
    Graph[u][v] = Graph[v][u] = f[(1 << u) | (1 << v)][(1 << u) | (1 << v)] = 1;
  }
  for (register int i = 0; i < (1 << n); ++i)
    for (register int j = 0; j < (1 << n); ++j)
      if ((i & j) == j && f[i][j])
        for (register int k1 = 0; k1 < n; ++k1)
          for (register int k2 = 0; k2 < n; ++k2) {
            if (Graph[k1][k2] && (i & (1 << k1)) && (~i & (1 << k2)) &&
                !(((j & (~(1 << k1))) | (1 << k2)) >> (k2 + 1)))
              f[i | (1 << k2)][j & (~(1 << k1)) | (1 << k2)] += f[i][j];
          }
  int ans = 0;
  for (register int i = 0; i < (1 << n); ++i)
    if (Tj(i) == k) ans += f[(1 << n) - 1][i];
  write(ans), putchar('\n');
  return 0;
}
