/* AUTHOR: TUAN ANH - BUI */
// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<ll, int> ii;
typedef pair<int, ii> iii;

template<class X, class Y>
    bool minimize(X &x, const Y &y) {
        if (x > y) return x = y, true;
        return false;
    }

template<class X, class Y>
    bool maximize(X &x, const Y &y) {
        if (x < y) return x = y, true;
        return false;
    }

#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "lock"
/*  END OF TEMPLATE. ICEBEAR IS REALLY CUTE  */

const int MOD = 1e9 + 7;
const int inf = (int)1e9 + 27092008;
const ll INF  = (ll)1e18 + 27092008;
const int N = 5e5 + 5;
int n, k, a[N];
ll sum;
vector<vector<ll>> ans;

void init(void) {
    cin >> n >> k;
    FOR(i, 1, n) cin >> a[i], sum += a[i];
}

void process(void) {
    ll T = sum / k;
    if (T < *max_element(a + 1, a + n + 1)) return void(cout << "-1");
    multiset<ii> s;
    FOR(i, 1, n) s.insert(mp(a[i], i));
    while(!s.empty()) {
        vector<ii> vec;
        REP(i, k) {
            vec.pb(*--s.end());
            s.erase(--s.end());
        }

        ll x = min(vec.back().first, T - (s.empty() ? 0ll : s.rbegin()->first));
        T -= x;
        vector<ll> cur(1, x);
        for(auto [v, j] : vec) {
            cur.push_back(j);
            v -= x;
            if (v > 0) s.insert(mp(v, j));
        }
        ans.push_back(cur);
    }
    cout << ans.size() << '\n';
    for(auto S : ans) {
        for(ll x : S) cout << x << ' ';
        cout << '\n';
    }
}

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    if (fopen(task".inp", "r")) {
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }
    int tc = 1;
//    cin >> tc;
    while(tc--) {
        init();
        process();
    }
    return 0;
}

