#include <bits/stdc++.h>
using namespace std;
struct Bitset {
  int sz, last;
  vector<unsigned int> v;
  Bitset(int n) {
    sz = n + 31 >> 5;
    last = n & 31;
    v.clear();
    v.resize(sz, 0);
  }
  void operator&=(const Bitset &b) {
    for (int i = 0; i < sz; i++) v[i] &= b.v[i];
  }
  Bitset operator&(const Bitset &b) {
    Bitset rlt = *this;
    rlt &= b;
    return rlt;
  }
  void operator|=(const Bitset &b) {
    for (int i = 0; i < sz; i++) v[i] |= b.v[i];
  }
  Bitset operator|(const Bitset &b) {
    Bitset rlt = *this;
    rlt |= b;
    return rlt;
  }
  void operator^=(const Bitset &b) {
    for (int i = 0; i < sz; i++) v[i] ^= b.v[i];
  }
  Bitset operator^(const Bitset &b) {
    Bitset rlt = *this;
    rlt ^= b;
    return rlt;
  }
  void operator<<=(int x) {
    if (!x) return;
    int d = x + 31 >> 5, r = (d << 5) - x;
    for (int i = sz - 1; i >= d; i--)
      v[i] = (v[i - d] >> r) | ((v[i - d + 1] & ((1u << r) - 1)) << 32 - r);
    v[d - 1] = (v[0] & ((1u << r) - 1)) << 32 - r;
    for (int i = d - 2; i >= 0; i--) v[i] = 0;
    v[sz - 1] &= (1u << last) - 1;
  }
  Bitset operator<<(int x) {
    Bitset rlt = *this;
    rlt <<= x;
    return rlt;
  }
  void operator>>=(int x) {
    if (!x) return;
    int d = x >> 5, r = x & 31;
    for (int i = 0; i + d + 1 < sz; i++)
      v[i] = (v[i + d] >> r) | ((v[i + d + 1] & ((1u << r) - 1)) << 32 - r);
    if (d < sz) v[sz - d - 1] = v[sz - 1] >> r;
    for (int i = sz - d; i < sz; i++) v[i] = 0;
  }
  Bitset operator>>(int x) {
    Bitset rlt = *this;
    rlt >>= x;
    return rlt;
  }
  bool operator==(const Bitset &b) {
    for (int i = 0; i < sz; i++)
      if (v[i] != b.v[i]) return 0;
    return 1;
  }
  bool operator!=(const Bitset &b) {
    for (int i = 0; i < sz; i++)
      if (v[i] != b.v[i]) return 1;
    return 0;
  }
  bool operator[](int x) { return (v[x >> 5] >> (x & 31)) & 1; }
  int count() {
    int rlt = 0;
    for (int i = 0; i < sz; i++) rlt += __builtin_popcount(v[i]);
    return rlt;
  }
  int size() { return sz - 1 << 5 ^ last; }
  bool any() {
    for (int i = 0; i < sz; i++)
      if (v[i]) return 1;
    return 0;
  }
  bool none() {
    for (int i = 0; i < sz; i++)
      if (v[i]) return 0;
    return 1;
  }
  bool all() {
    for (int i = 0; i < sz; i++)
      if (~v[i]) return 0;
    return 1;
  }
  void set() {
    for (int i = 0; i < sz; i++) v[i] = ~0;
    v[sz - 1] &= (1u << last) - 1;
  }
  void set(int x) { v[x >> 5] |= 1u << (x & 31); }
  void reset() {
    for (int i = 0; i < sz; i++) v[i] = 0;
  }
  void reset(int x) { v[x >> 5] &= ~(1u << (x & 31)); }
  void flip() {
    for (int i = 0; i < sz; i++) v[i] = ~v[i];
    v[sz - 1] &= (1u << last) - 1;
  }
  void flip(int x) { v[x >> 5] ^= 1u << (x & 31); }
  void change(int x, bool val) {
    if ((v[x >> 5] >> (x & 31)) & 1 ^ val) v[x >> 5] ^= 1u << (x & 31);
  }
  vector<int> get() {
    vector<int> rlt;
    for (int i = 0; i < sz; i++)
      if (v[i]) {
        for (int j = 0; j < 32; j++)
          if (v[i] & (1u << j)) rlt.push_back((i << 5) | j);
      }
    return rlt;
  }
  void print(int len) {
    for (int i = 0; i < len; i++) printf("%d ", (*this)[i]);
  }
};
int n, s, a[70707], id[70707], in[70707];
bool vis[70707];
set<int> st[70707];
bool cmp(int i, int j) {
  return a[i] != a[j] ? a[i] < a[j] : !vis[i] && vis[j];
}
int main() {
  Bitset val = Bitset(70707), nwb = Bitset(70707), tmp = Bitset(70707);
  scanf("%d %d", &n, &s);
  int I = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    if (a[i] > s) return puts("-1"), 0;
    if (a[i] > a[I]) I = i;
  }
  vis[I] = 1;
  s -= a[I];
  val.v[0] = 1;
  for (int i = 1; i <= n && s; i++)
    if (!vis[i] && a[i] <= s) {
      tmp = val << a[i];
      nwb = val ^ (val | tmp);
      val |= tmp;
      vector<int> v = nwb.get();
      for (int j = 0; j < v.size(); j++) {
        if (v[j] <= s) st[i].insert(v[j]);
      }
    }
  if (!val[s]) return puts("-1"), 0;
  for (int i = n; i >= 1; i--) {
    if (st[i].find(s) != st[i].end()) {
      s -= a[i];
      vis[i] = 1;
    }
  }
  for (int i = 1; i <= n; i++) id[i] = i;
  sort(id + 1, id + n + 1, cmp);
  for (int i = 1; i <= n; i++) {
    if (!vis[id[i]]) {
      in[id[i + 1]] = id[i];
    }
  }
  for (int i = 1; i <= n; i++) {
    printf("%d ", a[i] - a[in[i]]);
    if (in[i])
      printf("1 %d\n", in[i]);
    else
      puts("0");
  }
  return 0;
}
