#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(){ int t; int b2; int f; int c; cin >> t >> b2 >> f >> c; for (long long bb = 0; bb <= t; bb++) { long long b = bb; long long a = b == 0 ? 0 : (c + b - 1) / b; if (a + b > t || a * b < c) continue; long long k = t - a - b; if (a < b) swap (a, b); /* for (long long k = 0; k <= t; k++) { long long a = (t - k + 1) / 2; long long b = (t - k) / 2; //*/ long long back = k * (k + 1) / 2 + a * (a + 1) / 2 + b * (b + 1) / 2 + (a + b) * k; if (f + b2 > back || f > back - t) continue; if (c > b * a) continue; // fprintf (stderr, "k = %lld, a = %lld, b = %lld\n", k, a, b); vector v[t + 1]; for (int i = 0; i < t + 1; i++) { if (i != t && i != k + a) { // fprintf (stderr, "ff1: %d - %d\n", i, i + 1); v[i].push_back (i + 1); } if (i == k && b) { // fprintf (stderr, "ff2: %d - %lld\n", i, a + k + 1); v[i].push_back (a + k + 1); } if (i > k + a) for (int j = 0; j < a && c; j++) { // fprintf (stderr, "cross: %d - %lld\n", i, k + j + 1); v[i].push_back (k + j + 1), c--; } if (b2 && i > 0) { // fprintf (stderr, "back: %d - %lld\n", i, i == a + k + 1 ? i - 1 : k); v[i].push_back (i == a + k + 1 ? k : i - 1), b2--; } } for (int i = 0; i < t + 1 && b2 + f; i++) { for (int j = 0; j <= i - 2 && (i <= k + a || j < k || (j == k && i > k + a + 1)) && b2 + f; j++) { // fprintf (stderr, "forback1: %d - %d\n", i, j); if (b2) v[i].push_back (j), b2--; else v[j].push_back (i), f--; } for (int j = k + a + 1; j < i - 2 && b2 + f; j++) { // fprintf (stderr, "forback2: %d - %d\n", i, j); if (b2) v[i].push_back (j), b2--; else v[j].push_back (i), f--; } } assert (c + f + b2 == 0); printf ("%d\n", t + 1); for (int i = 0; i < t + 1; i++) { printf ("%d", (int)v[i].size ()); for (int j = 0; j < (int)v[i].size (); j++) printf (" %d", v[i][j] + 1); puts (""); } return 0; } puts ("-1"); return 0; }