#include <bits/stdc++.h>   using namespace std;   int ABS(int a) {     if (a < 0) return (-a);     return a;   }   void input() {}   int n, table;   int a[55];   double dp[55][55][55][55];   int aim;   double f(int idx, int sum, int k, int cnt) {     if (idx == n) {       if (sum != aim || cnt == 0) return 0;       return (k * cnt * 1.0) / ((double)(n)-k);     }     double &res = dp[idx][sum][k][cnt];     if (res > -0.5) return res;     double invK = (k + 1.0) / (idx + 1.0);     double invNK = (idx - k + 1.0) / (idx + 1.0);     res = 0.0;     if (sum + a[idx] <= aim) {       res += invK * f(idx + 1, sum + a[idx], k + 1, cnt);     }     if (aim + a[idx] > table) cnt++;     res += invNK * f(idx + 1, sum, k, cnt);     return res;   }   int main() {     input();     cin >> n;     int sum = 0;     for (int i = (0); i < (n); ++i) {       cin >> a[i];       sum += a[i];     }     cin >> table;     if (sum <= table) {       printf( %d n , n);       return 0;     }     double ans = 0.0;     for (int i = (1); i < (table + 1); ++i) {       for (int I = (0); I < (55); ++I)         for (int j = (0); j < (55); ++j)           for (int k = (0); k < (55); ++k)             for (int l = (0); l < (55); ++l) dp[I][j][k][l] = -1.0;       aim = i;       ans += f(0, 0, 0, 0);     }     printf( %.12lf n , ans);     return 0;   }   