# -*- coding: utf-8 -*-

x, y, z, k = list(map(int, input().split()))

a = list(map(int, input().split()))

b = list(map(int, input().split()))

c = list(map(int, input().split()))



a.sort(reverse=True)

b.sort(reverse=True)

c.sort(reverse=True)



abc = []



for i, _a in enumerate(a):

    for j, _b in enumerate(b):

        if (i+1) * (j+1) > k:

            break

        for l, _c in enumerate(c):

            if (i+1) * (j+1) * (l+1) > k:

                break

            abc.append(_a + _b + _c)



abc.sort(reverse=True)

for x in abc[:k]:

    print(x)

# -*- coding: utf-8 -*-

import heapq



x, y, z, k = list(map(int, input().split()))

a = list(map(int, input().split()))

b = list(map(int, input().split()))

c = list(map(int, input().split()))



la, lb, lc = len(a), len(b), len(c)



a.sort(reverse=True)

b.sort(reverse=True)

c.sort(reverse=True)



fix = set()



q = [(-(a[0]+b[0]+c[0]), 0, 0, 0)]



for _ in range(k):

    abc, i, j, l = heapq.heappop(q)

    print((-abc))



    if i+1 < la and (i+1, j, l) not in fix:

        heapq.heappush(q, (-(a[i+1]+b[j]+c[l]), i+1, j, l))

        fix.add((i+1, j, l))



    if j+1 < lb and (i, j+1, l) not in fix:

        heapq.heappush(q, (-(a[i]+b[j+1]+c[l]), i, j+1, l))

        fix.add((i, j+1, l))



    if l+1 < lc and (i, j, l+1) not in fix:

        heapq.heappush(q, (-(a[i]+b[j]+c[l+1]), i, j, l+1))

        fix.add((i, j, l+1))

# -*- coding: utf-8 -*-
x, y, z, k = list(map(int, input().split()))
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = list(map(int, input().split()))
a.sort(reverse=True)
b.sort(reverse=True)
c.sort(reverse=True)
abc = []
for i, _a in enumerate(a):
    for j, _b in enumerate(b):
        if (i + 1) * (j + 1) > k:
            break
        for l, _c in enumerate(c):
            if (i + 1) * (j + 1) * (l + 1) > k:
                break
            abc.append(_a + _b + _c)
abc.sort(reverse=True)
for x in abc[:k]:
    print(x)

# -*- coding: utf-8 -*-
import heapq

x, y, z, k = list(map(int, input().split()))
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = list(map(int, input().split()))
la, lb, lc = len(a), len(b), len(c)
a.sort(reverse=True)
b.sort(reverse=True)
c.sort(reverse=True)
fix = set()
q = [(-(a[0] + b[0] + c[0]), 0, 0, 0)]
for _ in range(k):
    abc, i, j, l = heapq.heappop(q)
    print((-abc))
    if i + 1 < la and (i + 1, j, l) not in fix:
        heapq.heappush(q, (-(a[i + 1] + b[j] + c[l]), i + 1, j, l))
        fix.add((i + 1, j, l))
    if j + 1 < lb and (i, j + 1, l) not in fix:
        heapq.heappush(q, (-(a[i] + b[j + 1] + c[l]), i, j + 1, l))
        fix.add((i, j + 1, l))
    if l + 1 < lc and (i, j, l + 1) not in fix:
        heapq.heappush(q, (-(a[i] + b[j] + c[l + 1]), i, j, l + 1))
        fix.add((i, j, l + 1))

+import heapq + +la, lb, lc = len(a), len(b), len(c) -abc = [] -for i, _a in enumerate(a): -    for j, _b in enumerate(b): -        if (i + 1) * (j + 1) > k: -            break -        for l, _c in enumerate(c): -            if (i + 1) * (j + 1) * (l + 1) > k: -                break -            abc.append(_a + _b + _c) -abc.sort(reverse=True) -for x in abc[:k]: -    print(x) +fix = set() +q = [(-(a[0] + b[0] + c[0]), 0, 0, 0)] +for _ in range(k): +    abc, i, j, l = heapq.heappop(q) +    print((-abc)) +    if i + 1 < la and (i + 1, j, l) not in fix: +        heapq.heappush(q, (-(a[i + 1] + b[j] + c[l]), i + 1, j, l)) +        fix.add((i + 1, j, l)) +    if j + 1 < lb and (i, j + 1, l) not in fix: +        heapq.heappush(q, (-(a[i] + b[j + 1] + c[l]), i, j + 1, l)) +        fix.add((i, j + 1, l)) +    if l + 1 < lc and (i, j, l + 1) not in fix: +        heapq.heappush(q, (-(a[i] + b[j] + c[l + 1]), i, j, l + 1)) +        fix.add((i, j, l + 1))