#include<bits/stdc++.h>
#define maxn 200005
using namespace std;
int n,k,x;
int a[maxn];
long long suf[maxn];
set<pair<long long,int> > s;
set<pair<long long,int> > topx;
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>k>>x;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    suf[n+1]=0;
    for(int i=n;i>=1;i--){
        suf[i]=suf[i+1]+a[i];
    }
    long long val=0;
    if(x>1)
    {
        for(int i=2;i<=k+1;i++) {
            if(topx.size()<x-1) {
                val+=suf[i];
                topx.insert({suf[i],i});
            }
            else {
                if(suf[i] > (*topx.begin()).first) {
                    val+=suf[i]-(*topx.begin()).first;
                    s.insert(*topx.begin());
                    topx.erase(topx.begin());
                    topx.insert({suf[i],i});
                }
                else {
                    s.insert({suf[i],i});
                }
            }
        }
    }
    cout<<suf[1]+val-x*suf[k+1]<<" ";
    for(int i=2;i+k<=n+1;i++)
    {
        if(x>1)
        {
            if(suf[i + k] > (*topx.begin()).first) {
                val+=suf[i + k]-(*topx.begin()).first;
                s.insert(*topx.begin());
                topx.erase(topx.begin());
                topx.insert({suf[i + k],i + k});
            }
            else {
                s.insert({suf[i + k],i + k});
            }
            if(s.count({suf[i],i}))
            {
                s.erase({suf[i],i});
            }
            else
            {
                val-=suf[i];
                topx.erase({suf[i],i});
                auto it=s.end();
                it--;
                val+=(*it).first;
                topx.insert(*it);
                s.erase(it);
            }
        }
        cout<<suf[i] + val - x * suf[i + k]<<" ";
    }
}
