#include <bits/stdc++.h>
const long long N = 1000006;
using namespace std;
const long long MOD = 1000000007LL;
template <typename T>
T gcd(T a, T b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
template <typename T>
T power(T x, T y, long long m = MOD) {
  T ans = 1;
  while (y > 0) {
    if (y & 1LL) ans = (ans * x) % m;
    y >>= 1LL;
    x = (x * x) % m;
  }
  return ans % m;
}
long double dp[55][55][55];
long double fact[105];
vector<long long> a;
int32_t main() {
  fact[0] = fact[1] = 1.0;
  for (long long(i) = (2); i < (52); i++) {
    fact[i] = fact[i - 1] * (long double)i;
  }
  long long n;
  cin >> n;
  a.resize(n);
  long long sum = 0;
  for (long long(i) = (0); i < (n); i++) cin >> a[i], sum += a[i];
  long long p;
  cin >> p;
  long long cnt = 0;
  long double ans = 0;
  do {
    memset(dp, 0, sizeof(dp));
    dp[0][0][0] = 1;
    for (long long(i) = (1); i < (n); i++) {
      dp[i][0][0] = 1;
      for (long long(j) = (1); j < (i + 1); j++) {
        for (long long(k) = (1); k < (p + 1); k++) {
          dp[i][j][k] = dp[i - 1][j][k];
          if (k - a[i - 1] >= 0) dp[i][j][k] += dp[i - 1][j - 1][k - a[i - 1]];
        }
      }
    }
    for (long long(j) = (1); j < (n); j++) {
      for (long long(s) = (1); s < (p + 1); s++) {
        if (s + a[n - 1] > p) {
          ans +=
              dp[n - 1][j][s] * (fact[j]) * (fact[n - j - 1]) * (long double)j;
        }
      }
    }
    ++cnt;
    rotate(a.begin(), a.begin() + 1, a.end());
  } while (cnt < n);
  if (sum <= p) {
    ans += fact[n] * (long double)n;
  }
  ans /= fact[n];
  cout << fixed << setprecision(15) << ans;
}
