internal class Program
{
    static int[] pozicije(int[] u, int max)
    {
        int[] iz = new int[max - 1]; //niz pozicija gde se povecava c
        int zbir = 0;
        int[] zbirovi = new int[u.Length]; //zbir svih elemenata nakon date pozicije

        //nadji sve zbirove
        foreach (int x in u)
        { 
            zbir += x;
        }
        for (int i = 1; i <= u.Length; i++)
        {
            zbirovi[i - 1] = zbir - u[i - 1];
            zbir = zbir - u[i - 1];
        }
        //nadji najvece
        for (int i = 0; i < max - 1; i++)
        {
            int zmax = int.MinValue;
            for (int j = 0; j < u.Length; j++)
            {
                if (zbirovi[j] > zmax)
                {
                    zmax = zbirovi[j];
                    iz[i] = j;
                }
            }
            zbirovi[iz[i]] = int.MinValue;
        }
        return iz;
    }
    static void Main(string[] args)
    {
        //ulaz
        string l1 = Console.ReadLine();
        string l2 = Console.ReadLine();
        //ocitavanje
        string[] a1 = l1.Split(" ");
        string[] a2 = l2.Split(" ");

        //l1
        int n = int.Parse(a1[0]);
        int k = int.Parse(a1[1]);
        int max = int.Parse(a1[2]);
        //l2
        int[] niz = new int[a2.Length];
        for (int i = 0; i < a2.Length; i++)
        {
            niz[i] = int.Parse(a2[i]);
        }
        //uneto sve

        int brPodnizova = n - k + 1; //broj podnizova
        int[] maxAura = new int[brPodnizova]; //maksimalna aura za dati podniz
        int c = 1; //umnozenje pri povecavanju
        int aura = 0; //trenutna aura
        int[] podniz = new int[k]; //podniz
        
        //vrti svaki podniz redom
        for (int i = 0; i < brPodnizova; i++)
        {
            //belezi trenutni podniz
            int poz = 0;
            for (int z = i; z < i + k; z++)
            {
                podniz[poz] = niz[z];
                poz++;
            }

            int[] povecanja = pozicije(podniz, max);//pronalazi pozicije na kojima ze povecava c
            c = 1;
            aura = 0; //svaki podniz krece sa aurom 0
            int jPodniz = 0;//indeks u podnizu(ne pozicija u odnosu na ceo niz)
            for (int j = i; j < i + k; j++) //vrti elemente podniza
            {
                //racunanje aure kada se prodje kroz podniz
                aura += c * niz[j];

                bool povecaj = false;
                foreach (int x in povecanja)
                {
                    if (jPodniz == x) { povecaj =  true; break;}
                }
                if(povecaj) {c++;}
                jPodniz++;
            }
            maxAura[i] = aura;
        }
        //ispis
        foreach(int x in maxAura)
        {
            Console.Write(x +  " ");
        }
        
    }
}