//zxggtxdy!
#include<bits/stdc++.h>
using namespace std;
const int M=52,N=2e3+7,p=998244353;
int n,k,D,l[M],f1[N],f2[N],s[N],G[M][N],Q[M][N],dp[2][N];
inline long long pows(long long u,int v){
	long long ans=1; while(v>0) {if(v&1) ans=ans*u%p; u=u*u%p,v=v>>1;} return ans;
}
inline int binom(int a,int b){
	if(a<b||b<0) return 0; return 1ll*f1[a]*f2[a-b]%p*f2[b]%p;
}
inline int getval(int u,int q){
	int A=0,B=0; if(u<0) return 1; if(u==0) return pows(1-q+p,p-2);
	for(int i=1;i<=u+2;i++) s[i]=(s[i-1]+binom(i,u)*pows(q,i))%p; int v=pows(q,p-2);
	for(int i=1;i<=u+2;i++){
		int k=pows(v,i),b=s[i]*pows(v,i)%p,W=1ll*f1[u+2]*pows(i,p-2)%p;
		W=1ll*W*f2[i-1]%p*f2[u+2-i]%p; if((i+u)&1) W=p-W;
		A=(A+1ll*k*W)%p,B=(B+1ll*b*W)%p;
	}
	return pows(A-1+p,p-2)*B%p*pows(v,u)%p;
}
inline int getans(int u,int q){
	return pows(pows(D,p-2)*(u-q*k)%p,q)*f2[q]%p; 
}
signed main(){
	cin>>n>>k,f1[0]=f2[0]=1,G[0][0]=1;
	for(int i=1;i<=n;i++) cin>>l[i],D+=l[i];
	for(int i=1;i<=2005;i++) f1[i]=1ll*f1[i-1]*i%p,f2[i]=pows(f1[i],p-2);
	for(int i=1;i<=n;i++){
		memset(dp,0,sizeof(dp)),dp[0][0]=1,dp[1][0]=(l[i]>k);
		for(int j=1;j<=l[i]/k;j++) dp[0][j]=getans(l[i],j);
		for(int j=1;j<l[i]/k;j++) dp[1][j]=getans(l[i]-k,j);
		memset(Q,0,sizeof(Q));
		for(int a=0;a<=i;a++)
			for(int b=0;b<=D-l[i];b++)
				for(int c=0;c<=1;c++)
					for(int d=0;d<=l[i];d++)
						Q[a+c][b+d]=(Q[a+c][b+d]+1ll*G[a][b]*dp[c][d])%p;
		for(int a=0;a<=i;a++)
			for(int b=0;b<=D;b++) G[a][b]=Q[a][b];
	}
	int ans=0;
	for(int a=n;a>=0;a--)
		for(int b=0;b<=D;b++){
			if(a+b>0&&G[a][b]){
				int Q=(D-(a+b)*k+p)%p*pows(D,p-2)%p,T=pows(1-Q+p,p-2-b)*f1[b]%p;
				ans=(ans+pows(p-1,a+b+1)*G[a][b]%p*T%p)%p;
			}
		}
	cout<<ans<<endl;
	return 0;
}