x, y, z, k = gets.split.map(&:to_i)
as = gets.split.map(&:to_i).sort.reverse
bs = gets.split.map(&:to_i).sort.reverse
cs = gets.split.map(&:to_i).sort.reverse

ds = [as[0]+bs[0]]
is = Array.new(x, 0)
is[0] = 1
(x*y-1).times do
  max = 0
  pre_is = -1
  for ai in 0...x
    next if is[ai] == y
    if is[ai] == pre_is
      break if is[ai] == is.min
      next
    end
    tmp = as[ai] + bs[is[ai]]
    pre_is = is[ai]
    if max < tmp
      max = tmp
      max_i = ai
    end
  end
  ds << max
  is[max_i] += 1
end

ds = ds.sort.reverse
d_length = ds.length

is = Array.new(z, 0)

ans = cs[0]+ds[0]
anss = [ans]
is[0] = 1

(k-1).times do
  max = 0
  pre_is = -1
  for ci in 0...z
    next if is[ci] == d_length
    if is[ci] == pre_is
      break if is[ci] == is.min
      next
    end
	tmp = cs[ci]+ds[is[ci]]
    pre_is = is[ci]
    if max < tmp
      max = tmp
      max_i = ci
    end
  end
  anss << max
  is[max_i] += 1
end

puts anss
    