#include <bits/stdc++.h>
using namespace std;
int N, S, s;
pair<int, int> A[70000];
bitset<70001> mem[234], fl[300];
int sc[70001];
vector<int> cnt[70001];
long long sum;
void st(int p) {
  fl[0] = mem[p / 300];
  for (int i = p + 1; i < min(p + 300, N); i++)
    fl[i - p] = fl[i - p - 1] | (fl[i - p - 1] << A[i].first);
}
int main() {
  scanf("%d%d", &N, &S);
  for (int(i) = 0; (i) < (N); (i)++)
    scanf("%d", &A[i].first), A[i].second = i, sum += A[i].first;
  sort(A, A + N);
  if (A[N - 1].first > S || sum < S) {
    puts("-1");
    return 0;
  }
  S -= A[--N].first;
  reverse(A, A + N);
  bitset<70001> bt;
  bt.set(0);
  for (int(i) = 0; (i) < (N); (i)++) {
    bt = bt | (bt << A[i].first);
    if (i % 300 == 0) mem[i / 300] = bt;
    if (i == N - 1 && !bt.test(S)) {
      puts("-1");
      return 0;
    }
  }
  st((N - 1) / 300 * 300);
  bitset<70001> fa;
  fa.set(A[N].second);
  int pp = S;
  for (int i = N - 1; i >= 0; i--) {
    if (!fl[i % 300].test(S)) {
      fa.set(A[i + 1].second);
      S -= A[i + 1].first;
    }
    if (i && i % 300 == 0) st((i - 1) / 300 * 300);
  }
  if (S) fa.set(A[0].second);
  N++;
  sort(A, A + N, greater<pair<int, int> >());
  for (int(i) = 0; (i) < (N); (i)++) sc[A[i].second] = A[i].first;
  int las = 0;
  for (int(i) = 0; (i) < (N); (i)++)
    if (!fa.test(A[i].second))
      cnt[A[i - 1].second].push_back(A[i].second),
          sc[A[i - 1].second] -= A[i].first;
  for (int(i) = 0; (i) < (N); (i)++) {
    printf("%d %d", sc[i], cnt[i].size());
    for (int(j) = 0; (j) < (cnt[i].size()); (j)++) printf(" %d", cnt[i][j] + 1);
    putchar('\n');
  }
}
