cin >> n >> m; init_C(m); for (int i = 1; i <= n; ++i) cin >> a[i];
int M = (1 << n) - 1; for (int S = 0; S <= M; ++S) for (int i = 1; i <= n; ++i) if (S >> i - 1 & 1) ++cnt[S], sum[S] += a[i]; g[0][0] = 1; for (int S = 0; S < M; ++S) for (int k = 0; k <= m; ++k) { if (!g[S][k]) continue; g[S][k + 1] += g[S][k] / (n - cnt[S]); for (int i = 1; i <= n; ++i) { if (S >> i - 1 & 1) continue; if (k - sum[S] >= a[i] - 1) g[S | 1 << i - 1][k + 1] += g[S][k] * C[k - sum[S]][a[i] - 1] / (n - cnt[S]); } }
double ans = 0; for (int S = 1; S <= M; ++S) { int t = 0; for (int i = 0; i <= n; ++i) for (int j = 0; j <= m; ++j) f[i][j] = 0; f[0][0] = 1; for (int i = 1; i <= n; ++i) { if (S >> i - 1 & 1) continue; ++t; for (int j = 0; j <= m; ++j) for (int k = 0; k <= min(a[i] - 1, j); ++k) f[t][j] += f[t - 1][j - k] * C[j][k]; } if (sum[S] > m) continue; ans += cnt[S] * g[S][m] * f[t][m - sum[S]]; } cout << fixed << setprecision(7) << ans << "\n"; return0; }