N,K=map(int,input().split())
A=[0]+list(map(int,input().split()))
P=10**9+7

#DP[i][j]=子供iまでで飴j個を分ける(1<=i<=N,0<=j<=K)
DP=[[0]*(K+1) for _ in range(N+1)]
#DP[1][j]を作る
for index1 in range(0,A[1]+1):
    DP[1][index1]=1
#DP[i][0]=1である
for index2 in range(N+1):
    DP[index2][0]=1


for i in range(2,N+1):  #2<=i<=N
    #i固定下で累積和tableを作成
    #C[index]=DP[i-1][0]+...+DP[i-1][index-1](1<=index<=K+1)
    C=[0]*(K+2)
    C[1]=DP[i-1][0]%P
    for c in range(2,K+2):
        C[c]=(C[c-1]+DP[i-1][c-1])%P
    for j in range(1,K+1):  #1<=j<=K
        DP[i][j]=(C[j+1]-C[max(0,j-A[i])])%P




print(DP[N][K]%P)


#for index3 in range(N+1):
    #string=''
    #for index4 in range(K+1):
        #string+=str(DP[index1][index2])+' '
    #print(string)

        






