#include <bits/stdc++.h>
using namespace std;
const long long maxnodes = 1005;
long long dp[51][51][51][51];
long long val[51];
long long rec(long long i, long long people, long long sum, long long leave) {
  if (sum == 0 and people == 0) return 1;
  if (sum == 0) return 0;
  if (people == 0) return 0;
  if (i == 0) return 0;
  if (dp[i][people][sum][leave] == -1) {
    long long& ans = dp[i][people][sum][leave];
    ans = 0;
    ans += rec(i - 1, people, sum, leave);
    if (i != leave and sum >= val[i])
      ans += rec(i - 1, people - 1, sum - val[i], leave);
    return ans;
  } else
    return dp[i][people][sum][leave];
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  memset(dp, -1, sizeof(dp));
  long long n;
  cin >> n;
  long long tsum = 0;
  for (long long i = 1; i <= n; i++) {
    cin >> val[i];
    tsum += val[i];
  }
  long long p;
  cin >> p;
  if (tsum <= p) {
    cout << n;
    return 0;
  }
  double fact[n + 1];
  fact[0] = 1;
  for (long long i = 1; i <= n; i++) fact[i] = fact[i - 1] * i;
  double ans = 0;
  for (long long people = 1; people < n; people++) {
    for (long long person = 1; person <= n; person++) {
      for (long long sum = max(p - val[person] + 1, (long long)0); sum <= p;
           sum++) {
        double lans = people * rec(n, people, sum, person);
        if (sum + val[person] <= p) continue;
        lans *= fact[people];
        lans *= fact[n - people - 1];
        ans += lans;
      }
    }
  }
  ans /= fact[n];
  cout << fixed << setprecision(5);
  cout << ans;
}
