#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int n, m, k;
long double frac[maxn], ans;
bool tf;
long double C(int n, int m) { return frac[n] - frac[m] - frac[n - m]; }
long double sum(long double x, long double y) {
  if (x > log(10.0) * 99 || y > log(10.0) * 99) return log(10.0) * 100;
  return log(exp(x) + exp(y));
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; i++) frac[i] = frac[i - 1] + log((long double)i);
  for (int r = 0; r <= n; r++)
    for (int c = 0; c <= n; c++) {
      int x = (r + c) * n - r * c;
      if (k < x) continue;
      if (r == 0 && c == 0)
        ans = C(n, r) + C(n, c) - C(m, k) + C(m - x, k - x);
      else
        ans = sum(ans, C(n, r) + C(n, c) - C(m, k) + C(m - x, k - x));
      if (ans > log(10.0) * 99) {
        tf = true;
        break;
      }
    }
  if (tf)
    printf("1e99\n");
  else
    cout << fixed << setprecision(15) << exp(ans);
  return 0;
}
