#include <bits/stdc++.h>
using namespace std;
bool As;
char c;
int n, m, k;
inline void read(int& a) {
  a = 0;
  do c = getchar();
  while (c < '0' || c > '9');
  while (c <= '9' && c >= '0') a = (a << 3) + (a << 1) + c - '0', c = getchar();
}
int Min[1211];
double A[11][11];
bool Has[11][11];
const double eps = 1e-7;
int Matrix(int n) {
  int o = 1;
  double res = 1;
  if (n < 0) return 0;
  for (int i = 0; i < n; i++) {
    int j = -1;
    for (int t = i; t < n; t++)
      if (((A[t][i]) > 0 ? (A[t][i]) : -(A[t][i])) > eps) {
        j = t;
        break;
      }
    if (j ^ i) o ^= 1;
    if (j == -1) return 0;
    for (int t = 0; t < n; t++) swap(A[j][t], A[i][t]);
    for (int j = i + 1; j < n; j++)
      if (((A[j][i]) > 0 ? (A[j][i]) : -(A[j][i])) > eps) {
        double U = A[j][i] / A[i][i];
        for (int k = 0; k < n; k++) A[j][k] -= U * A[i][k];
      }
    res *= A[i][i];
  }
  if (o)
    return res + 0.1;
  else
    return -res + 0.1;
}
int Build(int S) {
  vector<int> Q;
  Q.clear();
  memset(A, 0, sizeof(A));
  while (S) Q.push_back(Min[S]), S ^= 1 << Min[S];
  for (int i = 0; i < Q.size(); i++)
    for (int j = 0; j < i; j++)
      if (Has[Q[i]][Q[j]]) A[i][j]--, A[j][i]--, A[j][j]++, A[i][i]++;
  return Q.size() - 1;
}
int Cnt[2002];
int Pow(int a, int x) {
  int res = 1;
  for (x; x; x >>= 1, a = a * a)
    if (x & 1) res = res * a;
  return res;
}
int F[2002];
int G[2002];
int main() {
  Min[0] = -1;
  for (int i = 1; i < 1024; i++)
    Cnt[i] = (i & 1) ? Cnt[i >> 1] + 1 : Cnt[i >> 1],
    Min[i] = (i & 1) ? 0 : (Min[i >> 1] + 1);
  read(n), read(m), read(k);
  while (m--) {
    int a, b;
    read(a), read(b);
    a--, b--;
    Has[b][a] = Has[a][b] = true;
  }
  int t = 1 << n;
  t--;
  for (int i = 1; i <= t; i++) {
    int W = 1;
    for (int j = 0; j < n; j++)
      if ((1 << j) & i) {
        int f = 0;
        for (int k = 0; k < n; k++)
          if (!(i & (1 << k)))
            if (Has[j][k]) f++;
        W *= f;
      }
    int df;
    G[i] = F[i] = W * (df = Matrix(Build(t ^ i)));
  }
  int Ans = 0;
  for (int i = t; ~i; i--) {
    if (Cnt[i] == k) Ans += G[i];
    int j = (i - 1) & i;
    while (j) {
      G[j] += (Cnt[j ^ i] & 1 ? -1 : 1) * F[i];
      j = i & (j - 1);
    }
  }
  cout << Ans << endl;
  return 0;
}
