#include using namespace std; int main() { int a, b, c, d; cin >> a >> b >> c >> d; a -= c; b -= c; vector u, v; if (a == 0 && b == 0) { if (c == 1) { cout << -1 << endl; return 0; } for (int i = 0; i < c; i++) { u.push_back(i); v.push_back((i + 1) % c); } } else if (c == 0) { for (int i = 0; i < a - 1; i++) { u.push_back(i * 2); v.push_back(i * 2 + 2); } for (int i = 0; i < b - 1; i++) { u.push_back(i * 2 + 1); v.push_back(i * 2 + 3); } } else if (a == 0) { for (int i = 0; i < b - 1; i++) { u.push_back(i * 2 + 1); v.push_back(i * 2 + 3); } u.push_back((b - 1) * 2 + 1); v.push_back(0); for (int i = 0; i < c - 1; i++) { u.push_back(i * 2 + 0); v.push_back(i * 2 + 2); } } else if (b == 0) { for (int i = 0; i < a - 1; i++) { u.push_back(i * 2 + 0); v.push_back(i * 2 + 2); } u.push_back((a - 1) * 2); v.push_back(1); for (int i = 0; i < c - 1; i++) { u.push_back(i * 2 + 1); v.push_back(i * 2 + 3); } } else { for (int i = 0; i < a - 1; i++) { u.push_back(i * 2); v.push_back(i * 2 + 2); } for (int i = 0; i < b - 1; i++) { u.push_back(i * 2 + 1); v.push_back(i * 2 + 3); } u.push_back((a - 1) * 2); v.push_back(505050); u.push_back((b - 1) * 2 + 1); v.push_back(505050); for (int i = 0; i < c - 1; i++) { u.push_back(505050 + i); v.push_back(505050 + i + 1); } } if (u.size() > d) { cout << -1 << endl; return 0; } vector press; press.push_back(0); press.push_back(1); for (int i = 0; i < u.size(); i++) { press.push_back(u[i]); press.push_back(v[i]); } sort(press.begin(), press.end()); press.erase(unique(press.begin(), press.end()), press.end()); cout << press.size() << " " << u.size() << endl; for (int i = 0; i < u.size(); i++) { u[i] = lower_bound(press.begin(), press.end(), u[i]) - press.begin(); v[i] = lower_bound(press.begin(), press.end(), v[i]) - press.begin(); cout << u[i] << " " << v[i] << endl; } }