package main
import (
"bufio"
"fmt"
"os"
"sort"
)
const MOD int64 = 1000000007
var k int
var invFact int64
func powMod(a, b int64) int64 {
res := int64(1)
for b > 0 {
if b&1 == 1 {
res = res * a % MOD
}
a = a * a % MOD
b >>= 1
}
return res
}
func comb(m int64) int64 {
if m < 0 || m < int64(k) {
return 0
}
res := int64(1)
for i := 0; i < k; i++ {
x := (m - int64(i)) % MOD
if x < 0 {
x += MOD
}
res = res * x % MOD
}
return res * invFact % MOD
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n int
var s int64
fmt.Fscan(in, &n, &s)
g := make([]int64, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &g[i])
g[i]++
}
sort.Slice(g, func(i, j int) bool { return g[i] > g[j] })
k = n - 1
fact := int64(1)
for i := 2; i <= k; i++ {
fact = fact * int64(i) % MOD
}
invFact = powMod(fact, MOD-2)
var ans int64
var dfs func(int, int64, int)
dfs = func(idx int, sum int64, parity int) {
if sum > s {
return
}
if idx == n {
v := comb(s - sum + int64(k))
if parity == 0 {
ans += v
} else {
ans -= v
}
return
}
dfs(idx+1, sum, parity)
dfs(idx+1, sum+g[idx], parity^1)
}
dfs(0, 0, 0)
ans %= MOD
if ans < 0 {
ans += MOD
}
fmt.Fprintln(out, ans)
}