X,Y,Z,K=gets.split.map(&:to_i)
as=gets.split.map(&:to_i).sort.reverse
bs=gets.split.map(&:to_i)
cs=gets.split.map(&:to_i)
bcs=Array.new
for i in 0..Y-1
    for j in 0..Z-1
        bcs << bs[i]+cs[j]
    end
end
bcs.sort!
bcs.reverse!
ans=Array.new
exit









# a_idx,bc_idx=0,0
# level=0
# ans << as[0]+bcs[0]
# p as
# p bcs
# a_limited,bc_limited=false,false
# (K-1).times do
#     a_limited=true if as.size-1 <= a_idx+level
#     bc_limited=true if bcs.size-1 <= bc_idx+level
#     if a_limited
#         # p level+bc_idx
#         # p bcs[level+bc_idx+1]
#         ans << as[-1]+bcs[level+bc_idx+1]
#         bc_idx+=1
#     elsif bc_limited
#         ans << as[level+a_idx+1]+bcs[-1]
#         a_idx+=1
#     else
#         if as[level+a_idx+1]+bcs[level+bc_idx] < as[level+a_idx]+bcs[level+bc_idx+1]
#             ans << as[level+a_idx]+bcs[level+bc_idx+1]
#             bc_idx+=1
#         else
#             ans << as[level+a_idx+1]+bcs[level+bc_idx]
#             a_idx+=1
#         end
#     end
#     p [level+a_idx,level+bc_idx,a_limited,bc_limited]
#     if a_idx!=0 && bc_idx!=0
#         level+=1
#         a_limited=false
#         bc_limited=false
#         a_idx=0
#         bc_idx=0
#     end
# end
# puts ans
