#include <bits/stdc++.h>
using namespace std;
namespace RA {
int rnd(int p) { return 1ll * rand() * rand() % p; }
int rnd(int L, int R) { return rnd(R - L + 1) + L; }
}  // namespace RA
const int N = 70105;
int n, s;
int a[N], b[N], c[N], son[N];
bool vis[N];
unsigned f[N / 32];
bool get(int pos) { return f[pos >> 5] >> (pos & 31) & 1; }
unsigned getChunk(int pos) {
  unsigned v = (f[pos >> 5] >> (pos & 31));
  if (pos & 31)
    v |= ((32 - (pos & 31))
              ? (((f[(pos >> 5) + 1]) & ((1u << (32 - (32 - (pos & 31)))) - 1))
                 << (32 - (pos & 31)))
              : (f[(pos >> 5) + 1]));
  return v;
}
void bitorChunk(int pos, unsigned v) {
  f[pos >> 5] |=
      ((pos & 31) ? (((v) & ((1u << (32 - (pos & 31))) - 1)) << (pos & 31))
                  : (v));
  if (pos & 31) f[(pos >> 5) + 1] |= v >> (32 - (pos & 31));
}
void getScheme(int x) {
  if (x == 0) return;
  assert(b[x] < 1e9);
  int i = b[x];
  assert(b[x - a[i]] < i);
  vis[i] = true;
  getScheme(x - a[i]);
}
bool cmp(int x, int y) {
  if (a[x] != a[y]) return a[x] < a[y];
  return vis[x] < vis[y];
}
int main() {
  scanf("%d%d", &n, &s);
  for (int i = (1); i <= (n); ++i) {
    scanf("%d", a + i);
  }
  bitorChunk(0, 1);
  int maxI = max_element(a + 1, a + n + 1) - a;
  s -= a[maxI];
  vis[maxI] = true;
  for (int i = (0); i <= (s); ++i) b[i] = 1e9;
  b[0] = 0;
  int lim = s / 32;
  for (int i = (1); i <= (n); ++i) {
    if (i == maxI) continue;
    for (int j = (lim); j >= (0); --j) {
      unsigned v = getChunk(j * 32 + a[i]);
      if ((v | f[j]) > v) {
        for (int k = (0); k <= (31); ++k) {
          if (!(v >> k & 1) && (f[j] >> k & 1)) {
            b[j * 32 + k + a[i]] = i;
          }
        }
      }
      bitorChunk(j * 32 + a[i], f[j]);
    }
  }
  if (getChunk(s) & 1) {
    getScheme(s);
  } else {
    puts("-1");
    return 0;
  }
  for (int i = (1); i <= (n); ++i) c[i] = i;
  sort(c + 1, c + n + 1, cmp);
  for (int i = (2); i <= (n); ++i) {
    if (vis[c[i - 1]] == false) {
      son[c[i]] = c[i - 1];
    }
  }
  for (int i = (1); i <= (n); ++i) {
    if (son[i]) {
      printf("%d 1 %d\n", a[i] - a[son[i]], son[i]);
    } else {
      printf("%d 0\n", a[i]);
    }
  }
  return 0;
}
