#include <bits/stdc++.h>
using namespace std;
const int nmax = 10;
int g[1 + nmax][1 + nmax];
int dp[(1 << nmax)][(1 << nmax)];
int main() {
  int n, m, K;
  scanf("%d%d%d", &n, &m, &K);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    x -= 1;
    y -= 1;
    g[x][y] = g[y][x] = 1;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      for (int k = 0; k < n; k++) {
        if (i != j && j != k && k != i && g[i][j] == 1 && g[i][k] == 1) {
          dp[(1 << i) + (1 << j) + (1 << k)][(1 << j) + (1 << k)] = 1;
        }
      }
    }
  }
  for (int subm = 1; subm < (1 << n); subm++) {
    for (int config = 1; config < (1 << n); config++) {
      bool invalid = false;
      int cate = 0, poz = -1, cateFrunze = 0;
      for (int k = 0; k < n; k++) {
        if ((subm & (1 << k)) == 0 && (config & (1 << k)) > 0) {
          invalid = true;
        }
        if ((subm & (1 << k)) > 0) {
          cate++;
        }
        if ((config & (1 << k)) > 0) {
          poz = k;
          cateFrunze++;
        }
      }
      if (invalid || cate < 4 || cateFrunze < 2) continue;
      int muchiiBune = 0;
      for (int k = 0; k < n; k++) {
        if ((subm & (1 << k)) > 0 && (config & (1 << k)) == 0) {
          if (g[poz][k] == 1) {
            dp[subm][config] +=
                dp[subm - (1 << poz)][config - (1 << poz) + (1 << k)];
            muchiiBune++;
          }
        }
      }
      dp[subm][config] +=
          dp[subm - (1 << poz)][config - (1 << poz)] * muchiiBune;
    }
  }
  int sum = 0, submComplet = (1 << n) - 1;
  for (int config = 1; config < (1 << n); config++) {
    int cate = 0;
    for (int k = 0; k < n; k++) {
      if ((config & (1 << k)) > 0) {
        cate++;
      }
    }
    if (cate == K) sum += dp[submComplet][config];
  }
  printf("%d\n", sum);
  return 0;
}
