package main

import "fmt"
var N, K int
var u, w, v int
var dp, arr []int
var DP, mat [][]int
var vis, dist []int

const (
	MaxInt = 1<<31 - 1
	MinInt = -MaxInt - 1
	MOD = int(1e9) + 7
)
func addSelf(a *int, b int) {
	*a += b
}

func subSelf(a *int, b int) {
	*a -= b
}

func addSelfMOD(a *int, b int) {
	addSelf(a, b)
	if *a > MOD {
		*a -= MOD
	}
}

func subSelfMOD(a *int, b int) {
	subSelf(a, b)
	if *a < 0 {
		*a += MOD
	}
}
func max(a, b int) int {
	if a > b { return a }
	return b
}

func min(a, b int) int {
	if a < b { return a }
	return b
}

func abs(a int) int {
	if a < 0 { return -a }
	return a
}

func main() {
	_,e := fmt.Scanf("%d%d", &N, &K)
	if e != nil { return }
	dp = make([]int, K+1)
	dp[0] = 1
	for i:=0; i<N; i++ {
		_,e = fmt.Scanf("%d", &u)
		if e != nil { return }
		fake := make([]int, K+1)
		for used:=K; used>=0; used-- {
			tmp, L,R := dp[used], used+1, used + min(u, K-used)
			if L<=R {
				addSelfMOD(&fake[L], tmp)
				if R+1 <= K {
					subSelfMOD(&fake[R+1], tmp)
				}
			}
		}
		prefix := 0
		for i := range fake {
			addSelfMOD(&prefix, fake[i])
			addSelfMOD(&dp[i], prefix)
		}
	}
	fmt.Println(dp[K])
}
