n,mp,mq,L=map(int,input().split()) s=list(map(int,input().split())) M=10**9+7 q=[[0]*(mp+3) for i in range(n+1)] q[0][0]=1 for k in range(n): nq=[[0]*(mp+3) for i in range(n+1)] for i in range(k+1): for j in range(mp+1): l=max(L*i+L-mq,j+L-s[k]) r=min(mp,j+L-1) if l<=r: nq[i+1][l]+=q[i][j] nq[i+1][r+1]-=q[i][j] for i in range(n+1): for j in range(mp+2): nq[i][j]+=nq[i][j-1] nq[i][j]%=M for i in range(n+1): for j in range(mp+2): nq[i][j]+=q[i][j] nq[i][j]%=M q=nq N=mp+n fa=[1] for i in range(1,N+1): fa+=[fa[-1]*i%M] fb=[pow(fa[N],M-2,M)] for i in reversed(range(1,N+1)): fb+=[fb[-1]*i%M] fb.reverse() fc=lambda n,k:fa[n]*fb[k]*fb[n-k]%M if n>=k>=0 else 0 a=0 for i in range(n+1): for j in range(mp+1): a+=q[i][j]*fc(mp-j+n-1,n-1) a%=M print(a)