#include <bits/stdc++.h>
using namespace std;
int g[12][12];
int n, m, k;
long long dp[(1 << 10) + 2][(1 << 10) + 2];
long long rub(int a, int b) {
  if (dp[a][b] != -1) return dp[a][b];
  if (__builtin_popcount(b) == 2 && a == b) {
    int x, y = -1;
    for (int i = 0; i <= (int)(n)-1; i++) {
      if ((1 << i) & a) x = i;
      if (y == -1 && (1 << i) & a) y = i;
    }
    return g[x][y];
  }
  if (__builtin_popcount(a) == 1 && a == b) return 1;
  if (__builtin_popcount(a) == 1) return 0;
  if (a == 0) return 0;
  if (b & a != a) return 0;
  int z = 0;
  while (!((1 << z) & a)) z++;
  if (z >= n) cout << "DGSGSGSDG";
  long long w = 0;
  for (int i = 0; i <= (int)(n)-1; i++) {
    if ((1 << i) & a) continue;
    if (!g[z][i]) continue;
    if (!((1 << i) & b)) continue;
    w += rub(a ^ (1 << z) ^ (1 << i), b ^ (1 << z)) +
         rub(a ^ (1 << z), b ^ (1 << z));
  }
  dp[a][b] = w;
  return w;
}
int main() {
  ios_base::sync_with_stdio(0);
  int ok;
  cin >> n >> m >> k;
  for (int i = 0; i <= (int)(n)-1; i++)
    for (int j = 0; j <= (int)(n)-1; j++) g[i][j] = 0;
  for (int i = 0; i <= (int)(m)-1; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    g[a][b] = g[b][a] = 1;
  }
  for (int i = 0; i <= (int)((1 << n)) - 1; i++)
    for (int j = 0; j <= (int)((1 << n)) - 1; j++) dp[i][j] = -1;
  long long wyn = 0;
  for (int i = 0; i <= (int)((1 << n)) - 1; i++) {
    if (__builtin_popcount(i) == k) {
      wyn += rub(i, (1 << n) - 1);
    }
  }
  cout << wyn << endl;
  return 0;
}
