def d_cake_123_binary_search(X, Y, Z, K, A, B, C):

    # editionalの解法4 O(K^2log(max(P))

    # 参考: https://atcoder.jp/contests/abc123/submissions/4871511

    import bisect

    ab = sorted([e1 + e2 for e2 in B for e1 in A])  # A, Bの要素は全部調べる



    # rejected 以上の値は、美味しさの合計がそれ以上である個数がK個未満である

    accepted, rejected = -1, 10**11

    while abs(accepted - rejected) > 1:

        mid = (accepted + rejected) // 2

        count = sum([len(ab) - bisect.bisect_left(ab, mid - e) for e in C])

        if count >= K:

            accepted = mid

        else:

            rejected = mid



    ans = []

    for e in C:

        idx = bisect.bisect_left(ab, accepted - e)

        for i in range(idx, len(ab)):

            ans.append(e + ab[i])

    ans.sort(reverse=True)

    return '\n'.join(map(str, ans[:K]))



X, Y, Z, K = [int(i) for i in input().split()]

A = [int(i) for i in input().split()]

B = [int(i) for i in input().split()]

C = [int(i) for i in input().split()]

print((d_cake_123_binary_search(X, Y, Z, K, A, B, C)))
def d_cake_123_sort_modified():

    """editorial の解法 1."""

    import sys

    import numpy as np

    input = sys.stdin.readline

    X, Y, Z, K = [int(i) for i in input().split()]

    A = np.array([int(i) for i in input().split()])

    B = np.array([int(i) for i in input().split()])

    C = np.array([int(i) for i in input().split()])



    _a, _b = np.meshgrid(A, B)

    ab = np.sort((_a + _b).flatten())[::-1][:K]

    _ab, _c = np.meshgrid(ab, C)

    ans = np.sort((_ab + _c).flatten())[::-1][:K]

    return '\n'.join(map(str, ans))



print((d_cake_123_sort_modified()))
def d_cake_123_binary_search(X, Y, Z, K, A, B, C):
    # editionalの解法4 O(K^2log(max(P))
    # 参考: https://atcoder.jp/contests/abc123/submissions/4871511
    import bisect

    ab = sorted([e1 + e2 for e2 in B for e1 in A])  # A, Bの要素は全部調べる
    # rejected 以上の値は、美味しさの合計がそれ以上である個数がK個未満である
    accepted, rejected = -1, 10**11
    while abs(accepted - rejected) > 1:
        mid = (accepted + rejected) // 2
        count = sum([len(ab) - bisect.bisect_left(ab, mid - e) for e in C])
        if count >= K:
            accepted = mid
        else:
            rejected = mid
    ans = []
    for e in C:
        idx = bisect.bisect_left(ab, accepted - e)
        for i in range(idx, len(ab)):
            ans.append(e + ab[i])
    ans.sort(reverse=True)
    return "\n".join(map(str, ans[:K]))


X, Y, Z, K = [int(i) for i in input().split()]
A = [int(i) for i in input().split()]
B = [int(i) for i in input().split()]
C = [int(i) for i in input().split()]
print((d_cake_123_binary_search(X, Y, Z, K, A, B, C)))

def d_cake_123_sort_modified():
    """editorial の解法 1."""
    import sys
    import numpy as np

    input = sys.stdin.readline
    X, Y, Z, K = [int(i) for i in input().split()]
    A = np.array([int(i) for i in input().split()])
    B = np.array([int(i) for i in input().split()])
    C = np.array([int(i) for i in input().split()])
    _a, _b = np.meshgrid(A, B)
    ab = np.sort((_a + _b).flatten())[::-1][:K]
    _ab, _c = np.meshgrid(ab, C)
    ans = np.sort((_ab + _c).flatten())[::-1][:K]
    return "\n".join(map(str, ans))


print((d_cake_123_sort_modified()))

-def d_cake_123_binary_search(X, Y, Z, K, A, B, C): -    # editionalの解法4 O(K^2log(max(P)) -    # 参考: https://atcoder.jp/contests/abc123/submissions/4871511 -    import bisect +def d_cake_123_sort_modified(): +    """editorial の解法 1.""" +    import sys +    import numpy as np -    ab = sorted([e1 + e2 for e2 in B for e1 in A])  # A, Bの要素は全部調べる -    # rejected 以上の値は、美味しさの合計がそれ以上である個数がK個未満である -    accepted, rejected = -1, 10**11 -    while abs(accepted - rejected) > 1: -        mid = (accepted + rejected) // 2 -        count = sum([len(ab) - bisect.bisect_left(ab, mid - e) for e in C]) -        if count >= K: -            accepted = mid -        else: -            rejected = mid -    ans = [] -    for e in C: -        idx = bisect.bisect_left(ab, accepted - e) -        for i in range(idx, len(ab)): -            ans.append(e + ab[i]) -    ans.sort(reverse=True) -    return "\n".join(map(str, ans[:K])) +    input = sys.stdin.readline +    X, Y, Z, K = [int(i) for i in input().split()] +    A = np.array([int(i) for i in input().split()]) +    B = np.array([int(i) for i in input().split()]) +    C = np.array([int(i) for i in input().split()]) +    _a, _b = np.meshgrid(A, B) +    ab = np.sort((_a + _b).flatten())[::-1][:K] +    _ab, _c = np.meshgrid(ab, C) +    ans = np.sort((_ab + _c).flatten())[::-1][:K] +    return "\n".join(map(str, ans)) -X, Y, Z, K = [int(i) for i in input().split()] -A = [int(i) for i in input().split()] -B = [int(i) for i in input().split()] -C = [int(i) for i in input().split()] -print((d_cake_123_binary_search(X, Y, Z, K, A, B, C))) +print((d_cake_123_sort_modified()))