#include <bits/stdc++.h>
using namespace std;
int dp[1024][1024], x, y, n, m, k, G[12][12], ans, go;
vector<int> V[12];
int f(int m1, int m2) {
  int &r = dp[m1][m2];
  if (r != -1) return r;
  r = 0;
  if (__builtin_popcount(m2) == 1) {
    if (__builtin_popcount(m1) > 1) {
      int sag = 0;
      for (int i = 0; i <= n - 1; i++)
        if (((m2 >> i) & 1)) {
          sag = i + 1;
          break;
        }
      bool var = true;
      for (int i = 0; i <= n - 1; i++)
        if (((m1 >> i) & 1)) var &= G[i + 1][sag];
      return r = (int)var;
    }
    return 0;
  }
  int sag = 0;
  for (int i = 0; i <= n - 1; i++)
    if (((m1 >> i) & 1)) {
      sag = i + 1;
      break;
    }
  if (!sag) return r = 0;
  for (__typeof(V[sag].begin()) it = V[sag].begin(); it != V[sag].end(); it++) {
    go = *it;
    if (((m1 >> go - 1) & 1) or !((m2 >> go - 1) & 1)) continue;
    r += f(m1 - (1 << sag - 1) + (1 << go - 1), m2 - (1 << go - 1)) +
         f(m1 - (1 << sag - 1), m2);
  }
  return r;
}
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &x, &y);
    V[x].push_back(y);
    V[y].push_back(x);
    G[x][y] = G[y][x] = 1;
  }
  memset(dp, -1, sizeof dp);
  for (int i = 0; i <= (1 << n) - 1; i++)
    if (__builtin_popcount(i) == k) ans += f(i, ((1 << n) - 1) ^ i);
  cout << ans << '\n';
}
