func_code_string: //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;   }