using System;
using System.Text;
using System.Collections.Generic;
using static System.Math;
using System.Linq;
using static System.Array;

namespace Vertial
{
    class Program
    {
        static long[] AB;
        static long[] A;
        static long[] B;
        static long[] C;
        static List<long> ans;
        static void Main(string[] args)
        {
            var XYZK = Console.ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray();
            var X = XYZK[0];
            var Y = XYZK[1];
            var Z = XYZK[2];
            var tmp = X;

            var K = XYZK[3];

            A = Console.ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray();
            B = Console.ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray();
            C = Console.ReadLine().Split(' ').Select(x => long.Parse(x)).ToArray();
            var tmp2 = A;

            if (X > Y)
            {
                X = Y;
                Y = tmp;
                A = B;
                B = tmp2;
            }
            tmp = Z;
            tmp2 = C;
            if(X < Z)
            {
                Z = X;
                X = tmp;
                C = A;
                A = tmp2;
            }
            AB = new long[X*Y];
            for (int i = 0; i < X; i++)
            {
                for (int j = 0; j < Y; j++)
                {
                    AB[Y*i + j] = A[i] + B[j];
                }
            }

            Sort(AB);
            Sort(C);

            var l = AB[0]+C[0];
            var r = AB[X*Y-1] + C[Z-1];
            while (l<=r)
            {
                var mid = l + (r - l) / 2;
                if (SumUnderK(mid) < X*Y*Z - K+1)
                {
                    l = mid+1;
                }
                else
                {
                    r = mid - 1;
                }
            }

            ans = new List<long>();
            SetAns(l);
            var ans2 = ans.ToArray();
            Sort(ans2);
            Reverse(ans2);
            for (int i = 0; i < K; i++)
            {
                Console.WriteLine(ans2[i]);
                //Console.WriteLine(ans2.Count());
            }
        }

        static long SumUnderK(long K)
        {
            K++;
            long ans = 0;
            for (int i = 0; i < C.Length; i++)
            {
                var c = C[i];
                var l = 0;
                var r = AB.Length - 1;
                while(l <= r)
                {
                    var mid = l + (r - l) / 2;
                    if (c+AB[mid] < K)
                    {
                        l = mid + 1;
                    }
                    else
                    {
                        r = mid - 1;
                    }
                }
                ans += l;
            }
            return ans;
        }


        static void SetAns(long K)
        {
            for (int i = 0; i < C.Length; i++)
            {
                var c = C[i];
                var l = 0;
                var r = AB.Length - 1;
                while (l <= r)
                {
                    var mid = l + (r - l) / 2;
                    if (c + AB[mid] < K)
                    {
                        l = mid + 1;
                    }
                    else
                    {
                        r = mid - 1;
                    }
                }

                for (int j = l; j < AB.Length; j++)
                {
                    ans.Add(c + AB[j]);
                }
            }
        }
    }
}


Measured memory_bytes: 179088