def perferct_solve(N,K,A): mod = 998244353 diff = [A[i] for i in range(N)] cum = [A[i] for i in range(N)] S = A[0] for i in range(1,N): diff[i] = S - A[i] if diff[i] < 0: return 0 S += A[i] cum[i] = S dp = [[0 for minus in range(3*K+1)] for i in range(N)] for minus in range(3*K+1): first = A[0] - minus if -K<=first<=K: dp[0][minus] = 1 if minus: dp[0][minus] += dp[0][minus-1] dp[0][minus] %= mod for i in range(1,N): for minus in range(3*K+1): if diff[i] and -K<=A[i]-minus<=K: dp[i][minus] += dp[i-1][0] dp[i][minus] %= mod if minus%2==diff[i] and -K<=(cum[i]-minus)//2<=K: dp[i][minus] += dp[i-1][3*K] - dp[i-1][minus//2+diff[i]] dp[i][minus] %= mod if diff[i]<=1: pre_minus_L = max(diff[i],-K+minus-A[i]) pre_minus_R = min((minus+diff[i])//2,K+minus-A[i]) if pre_minus_L<=pre_minus_R: dp[i][minus] += dp[i-1][pre_minus_R] - dp[i-1][pre_minus_L-1] * (pre_minus_L>0) dp[i][minus] %= mod if minus: dp[i][minus] += dp[i][minus-1] dp[i][minus] %= mod return dp[N-1][0] N,K = map(int,input().split()) A = list(map(int,input().split())) assert 2<=N<=1500 assert 1<=K<=1500 assert len(A)==N for i in range(N): assert abs(A[i])<=K print(perferct_solve(N,K,A))