//starusc
#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0,f=1,c=getchar();
	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
	while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
	return f==1?x:-x;
}
#define ll long long
const int mod=998244353;
inline int fix(int x){
	return x+((x>>31)&mod);
}
inline int add(int x,int y){
	return fix(x+y-mod);
}
inline int dec(int x,int y){
	return fix(x-y);
}
inline int mul(int x,int y){
	return int((ll)x*y%mod);
}
inline void ADD(int &x,int y){
	x=fix(x+y-mod);
}
inline void DEC(int &x,int y){
	x=fix(x-y);
}
inline void MUL(int &x,int y){
	x=int((ll)x*y%mod);
}
inline int ksm(int x,int r){
	int ret=1;
	for(int i=0;(1ll<<i)<=r;i++){
		if((r>>i)&1)MUL(ret,x);
		MUL(x,x);
	}
	return ret;
}
inline int inv(int x){
	return ksm(x,mod-2);
}
const int N=52,M=2004;
int n,K,L,iL,ans,l[N],f[N][M],g[N][M],fac[M],ifac[M];
inline int calc(int u,int v){
	return mul(fac[u],inv(ksm(dec(1,v),u+1)));
//	return mul(fac[u],inv(mul(ksm(v,u),ksm(dec(1,v),u+1))));
}
int main(){
	fac[0]=ifac[0]=fac[1]=ifac[1]=1;
	for(int i=2;i<M;i++)fac[i]=mul(fac[i-1],i);
	ifac[M-1]=inv(fac[M-1]);
	for(int i=M-2;i>1;i--)ifac[i]=mul(ifac[i+1],i+1);
	n=read();K=read();
	for(int i=1;i<=n;i++){
		l[i]=read();
		L+=l[i];
	}
	iL=inv(L);
	f[0][0]=1;
	for(int i=1,pw1,pw2;i<=n;i++){
		memset(g,0,sizeof(g));
		for(int k=0,mx=(l[i]-1)/K;k<=mx;k++){//l[i]-1
			pw1=mul(ifac[k],ksm(mul(l[i]-k*K,iL),k));
			if(k)pw2=mul(ifac[k-1],ksm(mul(l[i]-k*K,iL),k-1));
			if(k&1){pw1=dec(0,pw1);pw2=dec(0,pw2);}
			for(int u=0;u<i;u++){
				for(int v=0;v<=L;v++)if(f[u][v]){
					ADD(g[u][v+k],mul(f[u][v],pw1));
					if(k)ADD(g[u+1][v+k-1],mul(f[u][v],pw2));
				}
			}
		}
		memcpy(f,g,sizeof(g));
	}
	DEC(f[0][0],1);
	assert(!f[0][0]);
	for(int i=0;i<=n;i++)
		for(int j=0;j<=L;j++)if(f[i][j]){
			DEC(ans,mul(calc(j,mul(L-(i+j)*K,iL)),f[i][j]));
		}
	cout<<ans<<"\n";
	return (0-0);
}