#include <bits/stdc++.h>
using namespace std;
const int MAXN = (1 << 10) + 10;
int dp[MAXN][MAXN];
int G[11][11];
int n, k;
int count_bit(int x) {
  int res = 0;
  while (x) {
    if (x & 1) res++;
    x >>= 1;
  }
  return res;
}
void solve() {
  for (int m = 1; m < (1 << n); m++) {
    if (count_bit(m) > 2) {
      for (int subm = m; subm > 0; subm = (subm - 1) & m) {
        int oo = count_bit(subm);
        for (int i = 0; i < n; i++) {
          if ((1 << i) & subm) {
            for (int j = 0; j < n; j++)
              if (m & (1 << j)) {
                if (!G[i][j] || (subm & (1 << j))) continue;
                int nm = (m ^ (1 << i));
                int ns = (subm ^ (1 << i));
                dp[m][subm] += dp[nm][ns];
                dp[m][subm] += dp[nm][ns ^ (1 << j)];
              }
          }
        }
        dp[m][subm] /= oo;
      }
    } else if (count_bit(m) == 2) {
      int a = -1, b = -1;
      for (int i = 0; i < n; i++)
        if (m & (1 << i)) {
          if (a < 0)
            a = i;
          else
            b = i;
        }
      if (G[a][b]) dp[m][m] = 1;
    }
  }
  long long ans = 0;
  for (int subm = 1; subm < (1 << n); subm++) {
    if (count_bit(subm) == k) {
      ans += dp[(1 << n) - 1][subm];
    }
  }
  cout << ans << endl;
}
int main() {
  int m;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--;
    v--;
    G[u][v] = 1;
    G[v][u] = 1;
  }
  solve();
  return 0;
}
