using System;
using System.Linq;
using System.Collections.Generic;
using static System.Console;
using System.Text;
using System.IO;
using static System.Math;
using System.Numerics;
using System.Runtime.InteropServices.ComTypes;
using System.Xml.Schema;
using System.ComponentModel.DataAnnotations;
using System.Security.Cryptography;

namespace AtCoder
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //SetOut(new StreamWriter(OpenStandardOutput()) { AutoFlush = false });
            Solve();
            //Out.Flush();
            Read();
        }

        static void Solve()
        {
            var (X, Y, Z, K) = Slice4<long>();
            var Ai = Sarray(); Array.Sort(Ai);
            var Bi = Sarray(); Array.Sort(Bi);
            var Ci = Sarray(); Array.Sort(Ci);
            // 美味しさの合計がO以上のものがK以上あるならOK
            var ok = 0L; var ng = Ai.Max() + Bi.Max() + Ci.Max() + 1;
            while (1 < ng - ok)
            {
                var O = (ok + ng) / 2;
                var num = 0L;
                foreach (var a in Ai)
                {
                    foreach (var b in Bi)
                    {
                        if (O <= a + b)
                            num += Ci.Length;
                        else if (a + b + Ci.Last() < O)
                            num += 0;
                        else
                        {
                            var idx = ~Array.BinarySearch(Ci, O - (a + b), new lb<long>());
                            num += Ci.Length - idx;
                        }
                        if (K <= num) break;
                    }
                    if (K <= num) break;
                }
                if (K <= num) ok = O;
                else ng = O;
            }
            var cdt = new List<long>();
            foreach (var a in Ai)
                foreach (var b in Bi)
                {
                    var idx = ~Array.BinarySearch(Ci, ok - (a + b), new lb<long>());
                    for (var i = idx; i < Ci.Length; ++i)
                        cdt.Add(a + b + Ci[i]);
                }
            cdt.Sort();cdt.Reverse();
            for (var i = 0; i < K; ++i)
                WriteLine(cdt[i]);
        }
        public class lb<T> : IComparer<T> where T : IComparable<T>
        {
            public int Compare(T x, T y) => 0 <= x.CompareTo(y) ? 1 : -1;
        }

        static long Mod = (long)1e9 + 7;
        static public long[] Sarray() { return ReadLine().Split().Select(long.Parse).ToArray(); }
        static public List<long> Slist() { return ReadLine().Split().Select(long.Parse).ToList(); }
        static public (T1 a, T2 b) Slice<T1, T2>()
        {
            var t = ReadLine().Split();
            return (
            (T1)Convert.ChangeType(t[0], typeof(T1)),
            (T2)Convert.ChangeType(t[1], typeof(T2)));
        }
        static public (T a, T b) Slice2<T>()
        {
            var t = ReadLine().Split();
            return (
            (T)Convert.ChangeType(t[0], typeof(T)),
            (T)Convert.ChangeType(t[1], typeof(T)));
        }
        static public (T a, T b, T c) Slice3<T>()
        {
            var t = ReadLine().Split();
            return (
            (T)Convert.ChangeType(t[0], typeof(T)),
            (T)Convert.ChangeType(t[1], typeof(T)),
            (T)Convert.ChangeType(t[2], typeof(T)));
        }
        static public (T a, T b, T c, T d) Slice4<T>()
        {
            var t = ReadLine().Split();
            return (
            (T)Convert.ChangeType(t[0], typeof(T)),
            (T)Convert.ChangeType(t[1], typeof(T)),
            (T)Convert.ChangeType(t[2], typeof(T)),
            (T)Convert.ChangeType(t[3], typeof(T)));
        }
    }
}

Measured memory_bytes: 257388