'use strict'
let input = require("fs").readFileSync("/dev/stdin", "utf8");
input = input.trim().split('\n');
let Nums = input[0].split(' ');
let Avol = Nums[0]*1;
let Bvol = Nums[1]*1;
let K = Nums[3]*1;
let As = input[1].split(' ').map(x => x*1).sort((a,b)=>{ return b - a });
let Bs = input[2].split(' ').map(x => x*1).sort((a,b)=>{ return b - a });
let Cs = input[3].split(' ').map(x => x*1).sort((a,b)=>{ return b - a });
let preAns = [];
let ans = [];

for(let i of As){
	for(let j of Bs){
    	preAns.push(i+j);
    }
}

let sortPreAns = preAns.map(x => x*1).sort((a,b)=>{ return b - a});

// AとBの組み合わせが必要数を超過してたら足切りする処理
let cutNum = Math.min(Avol*Bvol,K);
sortPreAns.length = cutNum;

// Cとの組み合わせの処理
for(let ab of sortPreAns){
  for(let c of Cs){
  	ans.push(c + ab);
  }
}
// 再ソート
ans.sort((a,b)=>{ return b - a })

for(let elm = 0; elm < K; elm++){
	console.log(ans[elm]);
}