#include <bits/stdc++.h>
using namespace std;
#define int long long

int n, m, dp[100][2];
vector<int> vals, cur;

int solve(int x, int car) {
  if (x == n-1) return 1;
  int &ret = dp[x][car];
  if (~ret) return ret;

  ret = 0;
  if (cur[x] + car == 0) ret = solve(x+1, 0);
  else if (cur[x] + car == 3) ret = solve(x+1, 1);
  else ret += solve(x+1, 0) + solve(x+1, 1);
  return ret;
}

int32_t main() {
  ios::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  memset(dp, -1, sizeof dp);

  cin >> n >> m;
  vals.resize(n);
  cur.resize(n, 0);

  for (int i = 0; i < n; ++i) {
    cin >> vals[i];
  }
  
  for (int i = n-1; i >= 0; --i) {
    int d = m / vals[i];
    cur[i] = d ? 1 : 0;
    m -= d * vals[i];

    if (i < n-1 && vals[i+1] / vals[i] == d + 1) {
      cur[i] = 2;
    }
  }

  cout << solve(0, 0) << '\n';
}

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define inf 0x3f3f3f3f
#define infll 0x3f3f3f3f3f3f3f3f
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define ii pair<int,int>
#define vii vector<ii>
#define vi vector<int>
#define pi 2*acos(0.0)

#define F_OR(i, a, b, s) for (int i=(a); (s)>0?i<(b):i>(b); i+=(s))
#define F_OR1(e) F_OR(i, 0, e, 1)
#define F_OR2(i, e) F_OR(i, 0, e, 1)
#define F_OR3(i, b, e) F_OR(i, b, e, 1)
#define F_OR4(i, b, e, s) F_OR(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)
#define FOR(...) F_ORC(__VA_ARGS__)(__VA_ARGS__)
#define EACH(x, a) for (auto& x: a)
 
// debug templates 
#define debug(x)       cerr<< #x <<" : "<< x << endl;
#define debuga(A,N)    cerr<< #A <<" : [";for(int i = 0; i<N;i++) cerr<<A[i]<<" "; cerr<<"]\n";
#define debuga2(A,N,M) cerr<< #A << " : \n"; for(int i=0;i<N;i++){cerr<<"[";for(int j=0;j<M;++j) cerr<<A[i][j]<<" ";cerr<<"]\n";}
#define debugp(p)      cerr<< #p <<" : "<<"("<<(p).first<<","<<(p).second<<")\n";
#define debugv(v)      cerr<< #v <<" : "<<"[";for(int i = 0; i< (v).size(); i++) cerr<<v[i]<<" "; cerr<<"]\n";
#define debugv2(v)     cerr<< #v << " : \n"; for(int i=0;i<v.size();i++){cerr<<"[";for(int j=0;j<(v[0].size());++j) cerr<<v[i][j]<<" ";cerr<<"]\n";}
#define debugs(m)      cerr<< #m <<" : [ "; for(auto itr = m.begin(); itr!=m.end();itr++) cerr<<*itr<<" "; cerr<<"]\n";
#define debugm(m)      cerr<< #m <<" : [ "; for(auto itr = m.begin();itr!=m.end(); itr++) cerr<<"("<<itr->first<<","<<itr->second<<") ";cerr<<"]\n";

const int mxN = 107;
double dp[mxN][mxN][mxN];

// expected value 
double ev(int a, int b, int c){
    if(a>99 || b>99 || c>99) return 0;
    if(dp[a][b][c]>0) return dp[a][b][c];
    double s=a+b+c;
    double ans = (ev(a+1,b,c)+1)*a/s;
    ans += (ev(a,b+1,c)+1)*b/s;
    ans += (ev(a,b,c+1)+1)*c/s;
    dp[a][b][c] = ans;
    return dp[a][b][c];
}

// solve case for 2 then do 3
void solve(){
    int a,b,c; cin >> a >> b >> c;
    double ans = ev(a,b,c);
    cout << fixed << setprecision(9) << ans;    
}
 
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	solve();
	return 0;
}
 
