#include <bits/stdc++.h>
using namespace std;
int n, m, k, tot, hd[15], to[105], nxt[105];
long long res, dp[1050][1050];
int read() {
  int x = 0, fl = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') fl = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * fl;
}
void add(int x, int y) {
  tot++;
  to[tot] = y;
  nxt[tot] = hd[x];
  hd[x] = tot;
  return;
}
int t1(int x) {
  int sum = 0;
  while (x) {
    sum += (x & 1);
    x >>= 1;
  }
  return sum;
}
int main() {
  n = read(), m = read(), k = read();
  for (int i = 1; i <= m; i++) {
    int x = read(), y = read();
    add(x, y), add(y, x);
  }
  for (int i = 1; i <= n; i++) dp[1 << (i - 1)][1 << (i - 1)] = 1;
  for (int s = 1; s <= (1 << n) - 1; s++) {
    for (int t = s; t; t = (t - 1) & s) {
      for (int x = 1; x <= n; x++) {
        if (s & (1 << (x - 1))) {
          for (int p = hd[x]; p; p = nxt[p]) {
            int y = to[p];
            if (!(s & (1 << (y - 1)))) {
              int t0 = t1(s) == 1 ? (s | (1 << (y - 1)))
                                  : (t | (1 << (y - 1))) &
                                        (((1 << n) - 1) ^ (1 << (x - 1)));
              if (!(t0 >> y)) dp[s | (1 << (y - 1))][t0] += dp[s][t];
            }
          }
        }
      }
    }
  }
  for (int i = 1; i <= (1 << n) - 1; i++)
    if (t1(i) == k) res += dp[(1 << n) - 1][i];
  printf("%lld\n", res);
  return 0;
}
