#include <bits/stdc++.h>
using namespace std;
const int N = 70010;
const unsigned int ONE = 1;
pair<int, int> A[N];
unsigned int f[2][N], Can_in[N], num_coin[N], last[N];
int main() {
  int n, s;
  while (cin >> n >> s) {
    for (int i = 1; i <= n; i++) {
      scanf("%d", &A[i].first);
      A[i].second = i;
    }
    sort(A + 1, A + n + 1);
    if (A[n].first > s) {
      printf("-1\n");
      continue;
    }
    s -= A[n].first;
    int m = (s >> 5) + 1;
    f[0][0] = 1;
    for (int i = 1; i < n && s && !last[s]; i++) {
      memset(f[1], 0, sizeof(int) * m);
      int offset = (A[i].first >> 5), shift = A[i].first % 32;
      for (int id = offset; id < m; id++) {
        f[1][id] |= (f[0][id - offset] << shift);
        if (id + 1 < m && shift)
          f[1][id + 1] |= (f[0][id - offset] >> (32 - shift));
      }
      for (int j = 0; j < m; j++) {
        if ((f[0][j] | f[1][j]) > f[0][j]) {
          for (int k = 0; k < 32; k++) {
            if (!((f[0][j] >> k) & ONE) && ((f[1][j] >> k) & ONE)) {
              last[(j << 5) + k] = i;
            }
          }
        }
        f[0][j] |= f[1][j];
      }
    }
    if (s > 0 && !last[s]) {
      printf("-1\n");
      continue;
    }
    for (int i = last[s]; i; i = last[s -= A[i].first]) {
      num_coin[A[i].second] = A[i].first;
    }
    int pre = n;
    for (int i = n - 1; i >= 1; i--) {
      if (num_coin[A[i].second]) continue;
      num_coin[A[pre].second] = A[pre].first - A[i].first;
      Can_in[A[pre].second] = A[i].second;
      pre = i;
    }
    num_coin[A[pre].second] = A[pre].first;
    for (int i = 1; i <= n; i++) {
      printf("%d", num_coin[i]);
      if (Can_in[i])
        printf(" 1 %d\n", Can_in[i]);
      else
        printf(" 0\n");
    }
  }
}
