#include <bits/stdc++.h>
using namespace std;
int n, arr[101], k;
long long int faktoriyel[100110];
long long int cvp = 0;
int recursive(int konum, int last) {
  if (konum == n) return 0;
  if (arr[konum] < k)
    cvp += last *
           (faktoriyel[n + k - 1 - arr[konum] - 1] /
            (faktoriyel[n - 1] * faktoriyel[k - arr[konum] - 1])) %
           1000000007;
  if (last == -1) return recursive(konum + 1, -1);
  return recursive(konum + 1, -1);
}
long long int fe(long long int b, long long int e) {
  if (e == 1) return b;
  if (e % 2 == 0) return fe(b * b % 1000000007, e / 2);
  return fe(b * b % 1000000007, e / 2) * b % 1000000007;
}
int main(void) {
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }
  faktoriyel[0] = 1;
  faktoriyel[1] = 1;
  for (int i = 1; i <= n + k; i++)
    faktoriyel[i + 1] = ((faktoriyel[i] * (i + 1)) % 1000000007);
  cout << faktoriyel[n + k - 1] << " " << fe(faktoriyel[n - 1], 1000000007 - 2)
       << " " << fe(faktoriyel[k], 1000000007 - 2) << endl;
  cvp = ((faktoriyel[n + k - 1] * fe(faktoriyel[n - 1], 1000000007 - 2)) %
         1000000007 * fe(faktoriyel[k], 1000000007 - 2)) %
        1000000007;
  recursive(0, -1);
  cout << cvp;
  return 0;
}
