#include <bits/stdc++.h>
using namespace std;
int dp[1111][1111][11], n, m, K, f[1111][1111][11], x, y, dps[2][1111], la, nw,
    cnt[1111], msk, ni, nj, nk, ans;
bool mp[11][11];
int main() {
  scanf("%d%d%d", &n, &m, &K);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    x--;
    y--;
    mp[x][y] = mp[y][x] = 1;
  }
  for (int i = 0; i < (1 << n); i++) {
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) cnt[i]++;
    }
  }
  for (int i = 0; i < (1 << n); i++) {
    for (int j = 0; j < (1 << n); j++) {
      if ((i & j) != 0) continue;
      memset(dps, 0, sizeof(dps));
      la = 0;
      nw = 1;
      dps[la][0] = 1;
      for (int k = 0; k < n; k++) {
        if (!(j & (1 << k))) continue;
        memset(dps[nw], 0, sizeof(dps[nw]));
        for (int h = 0; h < n; h++) {
          if (!(i & (1 << h))) continue;
          if (!mp[h][k]) continue;
          for (int p = i; p; p = (p - 1) & i) {
            dps[nw][p | (1 << h)] += dps[la][p];
          }
          dps[nw][1 << h] += dps[la][0];
        }
        la ^= 1;
        nw ^= 1;
      }
      for (int k = 0; k < (1 << n); k++) {
        f[i][j][cnt[i ^ k]] += dps[la][k];
      }
    }
  }
  dp[1][1][0] = 1;
  for (int i = 1; i < (1 << n); i++) {
    for (int j = 1; j < (1 << n); j++) {
      if ((i & j) != j) continue;
      for (int k = 0; k <= K; k++) {
        if (!dp[i][j][k]) continue;
        msk = (1 << n) - 1 - i;
        for (int p = msk; p; p = (p - 1) & msk) {
          for (int h = 0; h <= K; h++) {
            ni = i | p;
            nj = p;
            nk = k;
            if (ni == (1 << n) - 1)
              nk += (cnt[p] + h);
            else {
              if (cnt[i] == 1 && cnt[p] == 1) nk++;
              nk += h;
            }
            dp[ni][nj][nk] += dp[i][j][k] * f[j][p][h];
          }
        }
      }
    }
  }
  for (int i = 0; i < (1 << n); i++) ans += dp[(1 << n) - 1][i][K];
  printf("%d\n", ans);
  return 0;
}
