#include #define int long long //#define USE_FREOPEN //#define MUL_TEST #define FILENAME "hometown" using namespace std; void solve() { vector > edg; int a, b, c, d; cin >> a >> b >> c >> d; if (a == c && b == c) { if (a == 1) { cout << "-1\n"; return; } for (int i = 0; i < a; i++) { edg.push_back(make_pair(i, (i + 1) % a)); } } else if (a == c) { int x1 = 1, x2 = 2; for (int i = 0; i < b - a - 1; i++) { edg.push_back(make_pair(x1, x2)); x1 = x2++; } edg.push_back(make_pair(x1, 0)); x1 = 0; for (int i = 0; i < a - 1; i++) { edg.push_back(make_pair(x1, x2)); x1 = x2++; } } else if (b == c) { int x1 = 0, x2 = 2; for (int i = 0; i < a - b - 1; i++) { edg.push_back(make_pair(x1, x2)); x1 = x2++; } edg.push_back(make_pair(x1, 1)); x1 = 1; for (int i = 0; i < b - 1; i++) { edg.push_back(make_pair(x1, x2)); x1 = x2++; } } else if (c == 0) { int x1 = 2; for (int i = 0; i < a - 1; i++) edg.push_back(make_pair(0, x1++)); for (int i = 0; i < b - 1; i++) edg.push_back(make_pair(1, x1++)); } else { edg.push_back(make_pair(0, 2)); edg.push_back(make_pair(1, 2)); int x1 = 2, x2 = 3; for (int i = 0; i < c - 1; i++) { edg.push_back(make_pair(x1, x2)); x1 = x2++; } x1 = x2; for (int i = 0; i < a - c - 1; i++) edg.push_back(make_pair(0, x1++)); for (int i = 0; i < b - c - 1; i++) edg.push_back(make_pair(1, x1++)); } if (edg.size() > d) { cout << "-1\n"; } else { int maxn = 1; for (auto it : edg) { maxn = max(maxn, max(it.first, it.second)); } cout << maxn + 1 << ' ' << edg.size() << '\n'; for (auto it : edg) { int u = it.first, v = it.second; cout << u << ' ' << v << '\n'; } } } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #ifdef USE_FREOPEN freopen(FILENAME ".in", "r", stdin); freopen(FILENAME ".out", "w", stdout); #endif int _ = 1; #ifdef MUL_TEST cin >> _; #endif while (_--) solve(); _^=_; return 0^_^0; }