Problem: You have a circle of length C, and you are placing N arcs on it. Arc i has length L_i.

Every arc i is placed on the circle uniformly at random: a random real point on the circle is chosen, then an arc of length L_i centered at this point appears.

Note that the arcs are placed independently. For example, they may intersect or contain each other.

What is the probability that every real point of the circle will be covered by at least one arc? Assume that an arc covers its ends.

Constraints

* 2 \leq N \leq 6
* 2 \leq C \leq 50
* 1 \leq L_i < C
* All input values are integers.

Input

Input is given from Standard Input in the following format:


N C
L_1 L_2 ... L_N


Output

Print the probability that every real point of the circle will be covered by at least one arc. Your answer will be considered correct if its absolute error doesn't exceed 10^{-11}.

Examples

Input

2 3
2 2


Output

0.3333333333333333


Input

4 10
1 2 3 4


Output

0.0000000000000000


Input

4 2
1 1 1 1


Output

0.5000000000000000


Input

3 5
2 2 4


Output

0.4000000000000000


Input

4 6
4 1 3 2


Output

0.3148148148148148


Input

6 49
22 13 27 8 2 19


Output

0.2832340720702695

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define llu unsigned long long
#define ld double
#define llu unsigned long long
#define rep(i,x,y)  for(ll i=int(x);i<int(y);++i)
#define For(i,x,y)  for(ll i=int(x);i<=int(y);++i)
#define FOr(i,x,y)  for(ll i=int(x);i>=int(y);--i)
#define pi acos(-1) 
#define mk make_pair
#define pa pair<ll,ll>
#define lf else if
#define IL inline
#define sqr(x)      ((x)*(x))
#define Mul(x,y)    ((x)=1LL*(x)*(y)%mod)
#define Add(x,y)    ((x)=((x)+(y))%mod)
#define E(x)        return writeln(x),0
#define LL          (long long)
#define p(x)        printf("~%lld~\n",LL(x))
#define pp(x,y)     printf("~~%lld %lld~~\n",LL(x),LL(y))
#define ppp(x,y,z)  printf("~~~%lld %lld %lld~~~\n",LL(x),LL(y),LL(z))
#define pppp(a,b,c,d)   printf("~~~%lld %lld %lld %lld\n",LL(a),LL(b),LL(c),LL(d))
#define f_in(x)     freopen(x".in","r",stdin)
#define f_out(x)    freopen(x".out","w",stdout)
#define open(x)     f_in(x),f_out(x)
#define fi first
#define se second
#define y1          fafa____
typedef complex<double> E;
namespace SHENZHEBEI{
#ifdef LOCAL
    struct _{_(){freopen("cf.in","r",stdin);}}_; 
#endif 
#define NEG 1
    static const int GYN=2333333;
    char SZB[GYN],*SSS=SZB,*TTT=SZB;
    inline char gc(){   if (SSS==TTT){  TTT=(SSS=SZB)+fread(SZB,1,GYN,stdin); if (SSS==TTT) 

return '\n';  }   return *SSS++;    }
#define gc getchar
#if NEG
    inline ll read(){    ll x=0,g=1; char ch=gc();   for (;!isdigit(ch);ch=gc()) if 

(ch=='-') g=-1;  for (;isdigit(ch);ch=gc())  x=x*10-48+ch;   return x*g; }
    inline void write(ll x){    if (x<0) putchar('-'),x=-x;  if (x>=10)   write(x/10);    

putchar(x%10+'0');  }
#else
    inline ll read(){    ll x=0; char ch=gc();   for (;!isdigit(ch);ch=gc());    for 

(;isdigit(ch);ch=gc())  x=x*10-48+ch;   return x;   }
    inline void write(ll x){    if (x>=10)   write(x/10);    putchar(x%10+'0');  }
#endif
    inline char readchar(){ char ch=gc();   for(;isspace(ch);ch=gc());  return ch;  }
    inline ll readstr(char *s){ char ch=gc();   int cur=0;  for(;isspace(ch);ch=gc());      

for(;!isspace(ch);ch=gc())  s[cur++]=ch;    s[cur]='\0';    return cur; }
    void Print(long long *a,int s,int t){For(i,s,t)printf("%lld ",a[i]);puts("");}
    void Print(int *a,int s,int t){For(i,s,t)printf("%d ",a[i]);puts("");}
    void Print(char *a,int s,int t){For(i,s,t)putchar(a[i]);puts("");}
    void writeln(ll x){write(x),puts("");}
    void Max(ll &x,ll y){x=x<y?y:x;}
    ll max(ll x,ll y){return x<y?y:x;}
}using namespace SHENZHEBEI;
const ll N=10;
ll ans,gg,all,n,C,f[400][40],a[40],b[40];
void work(){
	memset(f,0,sizeof f);
	f[a[n]*n][0]=1;
	rep(i,0,n*C)For(j,i,n*C)
	For(S,0,all){
		if (!(i%n))continue;
		if (S>>b[i%n-1]&1)continue;
		f[min(n*C,max(j,i+n*a[b[i%n-1]+1]))][S|(1<<b[i%n-1])]+=f[j][S];
	}ans+=f[n*C][all];++gg;
//	writeln(f[n*C][all]);
}
void dfs(ll x){
	if (x==n-1)return work(),void(0);
	For(i,0,n-2)if (b[i]==-1){
		b[i]=x;
		dfs(x+1);
		b[i]=-1;
	}
}
int main(){
	n=read();C=read();all=(1<<n-1)-1;
	For(i,1,n)a[i]=read();
	sort(a+1,a+n+1);
	memset(b,-1,sizeof b);
	dfs(0);
	For(i,1,n-1)gg*=C;
	printf("%.12lf\n",1.0*ans/gg);
}
/*
[						]
	[						]
		[		]
			[		]	
*/