#include <bits/stdc++.h>
const int MAXN = 3e2 + 5, MAXM = 1e5 + 5;
template <typename _T>
void read(_T &x) {
  x = 0;
  char s = getchar();
  int f = 1;
  while (s > '9' || s < '0') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = (x << 3) + (x << 1) + (s - '0'), s = getchar();
  }
  x *= f;
}
template <typename _T>
void write(_T x) {
  if (x < 0) {
    putchar('-');
    x = (~x) + 1;
  }
  if (9 < x) {
    write(x / 10);
  }
  putchar(x % 10 + '0');
}
long double fac[MAXM];
int N, M, K;
void init(const int siz) {
  fac[0] = 0;
  for (int i = 1; i <= siz; i++) fac[i] = fac[i - 1] + log(i * 1.0);
}
long double C(const int n, const int m) { return fac[n] - fac[m] - fac[n - m]; }
int main() {
  read(N), read(M), read(K);
  init(M);
  long double ans = 0;
  for (int i = 0; i <= N; i++)
    for (int j = 0; j <= N; j++) {
      int num = (i + j) * N - i * j;
      if (num <= K)
        ans += exp(C(N, i) + C(N, j) - C(M, K) + C(M - num, K - num));
    }
  if (ans <= 1e99)
    printf("%.12lf\n", (double)ans);
  else
    puts("1e99");
  return 0;
}
