using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static int[] XYZ;
    static int K;
    static long[][] ABC;

    public static void Main(string[] args)
    {
        XYZ = new int[3];
        for (int i = 0; i < 3; i++)
            XYZ[i] = Input.NextInt();
        K = Input.NextInt();
        ABC = new long[3][];
        for (int i = 0; i < 3; i++)
        {
            var d = Input.LineLong();
            Array.Sort(d);
            Array.Reverse(d);
            ABC[i] = d;
        }

        Console.WriteLine((long)ABC[0][0] + ABC[1][0] + ABC[2][0]);
        K--;
        if (K == 0)
            return;

        var queue = new PriorityQueue<Tuple<long, Tuple<int, int, int>>>((a, b) => (int)(- a.Item1 + b.Item1));
        var registed = new HashSet<Tuple<int, int, int>>();

        Tuple<int, int, int> t = new Tuple<int, int, int>(0, 0, 0);
        for (; ; )
        {
            if (ABC[0].Length > t.Item1 + 1)
            {
                var tt = new Tuple<int, int, int>(t.Item1 + 1, t.Item2, t.Item3);
                var a = (long)ABC[0][tt.Item1] + ABC[1][tt.Item2] + ABC[2][tt.Item3];
                var item = new Tuple<long, Tuple<int, int, int>>(a, tt);
                if (!registed.Contains(tt))
                {
                    queue.Enqueue(item);
                    registed.Add(tt);
                }
            }
            if (ABC[1].Length > t.Item2 + 1)
            {
                var tt = new Tuple<int, int, int>(t.Item1, t.Item2 + 1, t.Item3);
                var a = (long)ABC[0][tt.Item1] + ABC[1][tt.Item2] + ABC[2][tt.Item3];
                var item = new Tuple<long, Tuple<int, int, int>>(a, tt);
                if (!registed.Contains(tt))
                {
                    queue.Enqueue(item);
                    registed.Add(tt);
                }
            }
            if (ABC[2].Length > t.Item3 + 1)
            {
                var tt = new Tuple<int, int, int>(t.Item1, t.Item2, t.Item3 + 1);
                var a = (long)ABC[0][tt.Item1] + ABC[1][tt.Item2] + ABC[2][tt.Item3];
                var item = new Tuple<long, Tuple<int, int, int>>(a, tt);
                if (!registed.Contains(tt))
                {
                    queue.Enqueue(item);
                    registed.Add(tt);
                }
            }
            var x = queue.Dequeue();
            t = x.Item2;
            Console.WriteLine(x.Item1);
            K--;
            if (K == 0)
                return;
        }
    }
}

public class PriorityQueue<T>
{
    List<T> list = new List<T>();
    readonly IComparer<T> comp = Comparer<T>.Default;
    class Comparer : IComparer<T>
    {
        readonly Comparison<T> comparison;
        public Comparer(Comparison<T> comparison) { this.comparison = comparison; }
        public int Compare(T x, T y) { return comparison(x, y); }
    }
    public PriorityQueue() { }
    public PriorityQueue(Comparison<T> comp) { this.comp = new Comparer(comp); }
    public void Enqueue(T item) { int i = list.BinarySearch(item, comp); list.Insert(i < 0 ? ~i : i, item); }
    public T Dequeue() { T r = list[0]; list.RemoveAt(0); return r; }
    public T Peek() { return list[0]; }
    public int Count { get { return list.Count; } }
    public T this[int i] { get { return list[i]; } set { list[i] = value; } }
}

public static class Input
{
    private static Queue<string> q = new Queue<string>();
    private static void Confirm() { if (q.Count == 0) foreach (var s in Console.ReadLine().Split(' ')) q.Enqueue(s); }
    public static int NextInt() { Confirm(); return int.Parse(q.Dequeue()); }
    public static long NextLong() { Confirm(); return long.Parse(q.Dequeue()); }
    public static string NextString() { Confirm(); return q.Dequeue(); }
    public static double NextDouble() { Confirm(); return double.Parse(q.Dequeue()); }
    public static int[] LineInt() { return Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); }
    public static long[] LineLong() { return Console.ReadLine().Split(' ').Select(long.Parse).ToArray(); }
    public static string[] LineString() { return Console.ReadLine().Split(' ').ToArray(); }
    public static double[] LineDouble() { return Console.ReadLine().Split(' ').Select(double.Parse).ToArray(); }
}

Measured memory_bytes: 16468