#include using namespace std; const int N = 1000005; set g[N]; int main() { int t, b, f, c; scanf("%d %d %d %d", &t, &b, &f, &c); int tt = t, bb = b, ff = f, cc = c; if (t == 0) { if (f + b + c > 0) { printf("-1\n"); return(0); } printf("0\n"); return(0); } tt--; int now = 2, last = 1; while (tt--) { g[last].insert(now); last = now; now++; } g[1].insert(now); int n = now; last = n - 1; int ss = sqrt(n - 1) + 1, cnt = 1; int val = 0; while (last > 1 && bb--) { val++; if (val > N) break; if (cnt >= ss || cnt == last) { bb++; last--; continue; } g[last].insert(cnt++); } last = ss + 1; cnt = n - 1 - ss; val = 0; while (ff--) { val++; if (val > 1000000) break; if (cnt <= last) { last++; cnt = ss + 1; ff++; continue; } g[last].insert(cnt); } last = n - 1; val = 0; while (cc--) { val ++; if (val > 1000000) break; g[n].insert(last--); } if (cc != -1 || ff != -1 || bb != -1 || tt != -1) { printf("-1\n"); } else { printf("%d\n", n); for (int i = 1; i <= n; ++i) { printf("%d", g[i].size()); for (int v : g[i]) { printf(" %d", v); } printf("\n"); } } return(0); }