#include <bits/stdc++.h>
int max(int len, ...) {
  int i, _max, num;
  va_list ap;
  va_start(ap, len);
  _max = va_arg(ap, int);
  for (i = 1; i < len; i++) {
    num = va_arg(ap, int);
    if (num > _max) _max = num;
  }
  va_end(ap);
  return _max;
}
int min(int len, ...) {
  int i, _min, num;
  va_list ap;
  va_start(ap, len);
  _min = va_arg(ap, int);
  for (i = 1; i < len; i++) {
    num = va_arg(ap, int);
    if (num < _min) _min = num;
  }
  va_end(ap);
  return _min;
}
int main(void) {
  int i, j, l, m, N, K, a[110];
  long long dp[110][100010] = {0LL}, cum[100010] = {0LL};
  scanf("%d%d", &N, &K);
  for (i = 1; i <= N; i++) scanf("%d", &a[i]);
  for (j = 0; j <= a[1]; j++) {
    dp[1][j] = 1LL;
  }
  m = a[1];
  for (i = 2; i <= N; i++) {
    m += a[i];
    cum[0] = 0LL;
    for (l = 1; l <= min(2, m, K) + 1; l++) {
      cum[l] = cum[l - 1] + dp[i - 1][l - 1];
      cum[l] %= 1000000007LL;
    }
    for (j = 0; j <= min(2, m, K); j++) {
      dp[i][j] = cum[j + 1] - cum[((int)max(2, 0, j - a[i]))];
      dp[i][j] %= 1000000007LL;
    }
  }
  printf("%lld\n", dp[N][K]);
  return 0;
}
