# -*- coding: utf-8 -*- def solve(input): A = int(input.split()[0]) # 村0から水を流すと、村0を含めて A 個の村に水が届いた。 B = int(input.split()[1]) # 村1から水を流すと、村1を含めて B 個の村に水が届いた。 C = int(input.split()[2]) # 村0からも村1からも水が届いた村は C 個であった。(ただし、C≤min(A,B)C≤min(A,B) をみたす。) D = int(input.split()[3]) # 水路は D 本以下であった。 N = 0 M = 0 vIndex = 2 ans = [] if A == B == C and C < 2: D = -1 pass elif A == B == C: C -= 2 ans.append("0 1") ans.append("1 0") for r in xrange(C): ans.append("0 " + str(vIndex)) vIndex += 1 pass elif A == C: A -= 1 # 自分 B -= 1 # 自分 ans.append("1 0") B -= 1 C -= 1 for r in xrange(C): ans.append("0 " + str(vIndex)) vIndex += 1 B -= 1 A -= 1 for r in xrange(B): ans.append("1 " + str(vIndex)) vIndex += 1 pass elif B == C: A -= 1 # 自分 B -= 1 # 自分 ans.append("0 1") A -= 1 C -= 1 for r in xrange(C): ans.append("1 " + str(vIndex)) vIndex += 1 B -= 1 A -= 1 for r in xrange(A): ans.append("0 " + str(vIndex)) vIndex += 1 pass else: A -= 1 # 自分 B -= 1 # 自分 for r in xrange(C): if r == 0: ans.append("0 2") ans.append("1 2") vIndex += 1 A -= 1 B -= 1 continue ans.append("2 " + str(vIndex)) A -= 1 B -= 1 vIndex += 1 for r in xrange(A): ans.append("0 " + str(vIndex)) vIndex += 1 for r in xrange(B): ans.append("1 " + str(vIndex)) vIndex += 1 pass ans.sort() if len(ans) <= D: ans.insert(0, str(vIndex) + " " + str(len(ans))) else: ans = ["-1"] return ans if __name__ == "__main__": ex = solve(raw_input()) for l in ex: print l