'use strict'

const mod = 1e9 + 7

function solve(N, K, A) {
  if (K === 0) {
    return 1
  }
  if (N === 1) {
    return K > N ? 0 : 1
  }
  var dp = new Array(K+1).fill(0)
  var prefix = new Array(K+1).fill(0)
  var newPrefix = new Array(K+1).fill(0)

  for (var i = N-1; i > 0; i--) {
    for (var j = 0; j <= K; j++) {
      if (i === (N-1)) {
        dp[j] = j <= A[i] ? 1 : 0
        prefix[j] = (j - 1) >= 0 ? (prefix[j-1] + dp[j]) % mod : dp[j] % mod
      } else {
        dp[j] = j <= A[i] ? prefix[j] % mod : (prefix[j] - prefix[j - A[i] - 1]) % mod
        newPrefix[j] = (j - 1) >= 0 ? (newPrefix[j-1] + dp[j]) % mod : dp[j] % mod
      }
    }
   
    if (i !== (N-1)) {
      prefix = [...newPrefix]
    }
  }
  var ans = K <= A[0] ? prefix[K] % mod : (prefix[K] - prefix[K - A[0] - 1]) % mod
  return ans
}

function main(input) {
  var lines = input.split("\n")
  var NK = lines[0].split(' ').map(l => parseInt(l))
  var N = NK[0]
  var K = NK[1]
  var A = lines[1].split(' ').map(l => parseInt(l))
  var ans = solve(N, K, A)
  console.log(ans)
}

main(require('fs').readFileSync('/dev/stdin', 'utf8'));