x,y,z,k=gets.split.map(&:to_i)
aarray=gets.split.map(&:to_i)
barray=gets.split.map(&:to_i)
carray=gets.split.map(&:to_i)

def returnArray(array1,array2,limit)
    count1=array1.count
    count2=array2.count
    indexarray=Array.new(count1,-1)
    ansarray=[]
    
    limit.times{
        i=0
        max=0
        maxindex=0
        
        count1.times{
        if !array2[indexarray[i]]
            i+=1
            next
        end
        
        if array1[i]+array2[indexarray[i]] > max
            max=array1[i]+array2[indexarray[i]]
            maxindex=i
        end
        i+=1
         }
    
        ansarray.push(max)
        indexarray[maxindex]-=1
        
    }
    
    return ansarray
    
end

longarray=returnArray(aarray.sort,barray.sort,aarray.count*barray.count)
ans=returnArray(carray.sort,longarray.reverse,k)

ans.map{|value|
    puts value
}
