global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

namespace vasa
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int n, k, x;
            string[] ulaz = Console.ReadLine().Split(" ");
             n = int.Parse(ulaz[0]);
             k = int.Parse(ulaz[0]);
             x = int.Parse(ulaz[0]);

            int[] niz = new int[n];
            int[] prefiksne = new int[n+1];
            ulaz = Console.ReadLine().Split(" ");


            int suma = 0;
            prefiksne[0] = 0;
            for (int i = 0; i < n; i++)
            {
                niz[i] = int.Parse(ulaz[i]);
                suma += niz[i];
                prefiksne[i+1] = suma;
            }

            // za svaki podniz
            for (int i = 0; i < n-k+1; i++) // i je pocetak
            {
                int[] p = new int[k];
                int aura = 0;
                for (int j = 0; j < k; j++)
                {
                    p[j] = prefiksne[i + j + 1] - prefiksne[i];
                    // a treba da ima max vrednost
                    // zato sa najvecim c (x)
                    // mnozimo najvredniji podskup

                }
                int max = p[k - 1] - p[k - 2]; // stavljamo na zadnji element
                int pokazivac = k - 1; // pokazuje na zadnji
                int pok = k - 1; // pokazuje na poslednji moguci u njegovoj kategoriji
                int najbolji = k - 1;
                while (x > 1)
                {
                    while (pok >= x - 1) // sve dok je unutar granica
                    {
                        if (p[pokazivac] - p[pok - 1] > max)
                        {
                            max = p[pokazivac] - p[pok - 1];
                            najbolji = pok;
                        }
                        pok--;
                    }
                    //kada nadjemo najbolju poziciju za secenje
                    aura += x * max;
                    x--; // smanjuje se broj kategorija
                    pokazivac = pok - 1;
                    pok = pokazivac;
                    if(pokazivac > 0)
                        max = p[pokazivac] - p[pokazivac - 1];
                    najbolji = pokazivac;
                }
                aura += pokazivac;
                Console.WriteLine(aura);
            }

        }
    }
}