#include <bits/stdc++.h>
using namespace std;
const int MAXN = 11;
const int MAXn = 2e3 + 100;
const int maxn = (1 << 11);
long long dp[maxn][maxn];
bool edg[MAXN][MAXN];
int main() {
  int n, m, K;
  cin >> n >> m >> K;
  int a, b;
  for (int i = 0; i < m; i++) {
    cin >> a >> b;
    a--;
    b--;
    edg[a][b] = 1;
    edg[b][a] = 1;
    dp[(1 << a) + (1 << b)][(1 << a) + (1 << b)] = 2;
  }
  for (int i = 0; i < (1 << n); i++) {
    int j = i;
    while (j) {
      int ans = 0;
      for (int p = 0; p < n; p++) {
        if (j & (1 << p)) {
          ans++;
        }
      }
      dp[i][j] /= ans;
      if (dp[i][j]) {
        for (int p = 0; p < n; p++) {
          if (i & (1 << p)) {
            for (int k = 0; k < n; k++) {
              if (edg[p][k] && !(i & (1 << k))) {
                if (j & (1 << p)) {
                  dp[(i + (1 << k))][j + (1 << k) - (1 << p)] += dp[i][j];
                } else {
                  dp[(i + (1 << k))][j + (1 << k)] += dp[i][j];
                }
              }
            }
          }
        }
      }
      j--;
      j = (j & i);
    }
  }
  long long res = 0;
  for (int i = 0; i < (1 << n); i++) {
    int ans = 0;
    for (int p = 0; p < n; p++) {
      if (i & (1 << p)) {
        ans++;
      }
    }
    if (ans == K) {
      res += dp[(1 << n) - 1][i];
    }
  }
  cout << res << endl;
}
