#include <bits/stdc++.h>
using namespace std;
long long int n, k, mod = 1000000007;
long long int a[101], b[101];
map<pair<long long int, long long int>, pair<long long int, long long int>> dp;
long long int poww(long long int n, long long int k) {
  if (k == 0) return 1;
  long long int t = poww(n, k / 2);
  t = (t * t) % mod;
  if (k % 2) return (t * n) % mod;
  return t;
}
long long int inv(long long int n) { return poww(n, mod - 2); }
long long int ncr(long long int n, long long int r) {
  if (r > n) return 0;
  long long int ans = 1;
  r = min(r, n - r);
  for (long long int i = 1; i <= r; i++) {
    ans = (ans * (n - r + i)) % mod;
    ans = (ans * inv(i)) % mod;
  }
  return ans;
}
long long int f(long long int pos, long long int left) {
  if (pos == n) {
    if (left) return 0;
    return 1;
  }
  if (a[pos] >= left) {
    return ncr(left + n - pos - 1, n - pos - 1);
  }
  pair<long long int, long long int> t = dp[{pos, left}];
  if (t.first) return t.second;
  long long int ans = 0;
  for (int i = 0; i <= min(left, a[pos]); i++) {
    ans = (ans + f(pos + 1, left - i)) % mod;
  }
  t.second = ans;
  dp[{pos, left}] = {1, ans};
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> k;
  for (int i = 0; i < n; i++) cin >> a[i];
  sort(a, a + n);
  cout << f(0, k);
}
