#include #define ALL(a) (a).begin(), (a).end() #define FOR(x,n) for(int x = 0; x < n; x++) #define SZ(a) ((int)(a).size()) using namespace std; typedef long long ll; const int MXN = 1e5+1; ll T, B, F, C; vector edges[MXN] = {}; int main() { cin >> T >> B >> F >> C; T++; ll i = 0; while(i+1 < T) if(i * (i+1) / 2 - i - 1 >= F && i * (i+1) / 2 >= B) break; else i++; if(i * (i+1) / 2 - i - 1 >= F && i * (i+1) / 2 >= B) { ll j = 1; while(j < i) edges[j].push_back(j+1), j++; for(int j = i+1; j <= T; j++) edges[1].push_back(j); ll cnt = 0; for(int ii = 1; ii <= i; ii++) { for(int j = ii+2; j <= i; j++) if(cnt < F) edges[ii].push_back(j), cnt++; } cnt = 0; for(int ii = i; ii > 1; ii--) for(int j = 1; j < ii; j++) if(cnt < B) edges[ii].push_back(j), cnt++; if((T-i+1) * (i-1) >= C) { cnt = 0; for(int ii = T; ii > i; ii--) for(int j = 2; j <= i+1; j++) if(cnt < C) edges[ii].push_back(j), cnt++; cout << T << "\n"; for(int j = 1; j <= T; j++) { cout << edges[j].size(); for(int v : edges[j]) cout << " " << v; cout << "\n"; } } else { cout << "-1\n"; } } else { cout << "-1\n"; } }