#include <bits/stdc++.h>
using namespace std;

long long rez=LLONG_MIN,x;
void prvi(vector<long long>& a, int l, int r, long long c,long long tr){
	
//	cout<<l<<" "<<r<<"    "<<c<<" "<<tr<<"\n";
	if ((l==r)){
		if ((c==x) or (c==x-1)) rez=max(rez,tr);
		return;
	}
		if ((c<x) and (l<r-1)) prvi(a,l+1,r,c+1,tr+a[l]*c);
				 prvi(a,l+1,r,c,tr+a[l]*c);
	
}

int main(int argc, char** argv) {
	
	int n,k;
	cin>>n>>k>>x;
	bool poz=true;
	vector<long long> a(n);
	for (int i=0;i<n;i++){
		cin>>a[i];
		if (a[i]<0) poz=false;
	}
		/*if (n<=20){
			
			for (int i=0;i<n-k+1;i++){
				rez=-1000000000;
				long long c=1;
				long long tr=0;
				prvi(a,i,i+k,c,tr);
				cout<<rez<<' ';
			}
			
		}
		*/
		
		if (poz){
			
			vector<long long> d(n);
			d[0]=a[0];
			for (int i=1;i<n;i++){
				d[i]=a[i]+d[i-1];
			}
			long long zbir = 0,c=1;
			for (int i=0;i<k;i++){
				zbir+=a[i]*c;
				c = min(x,c+1);
			}
			cout<<zbir<<'\n';
			for (int i =0;i<n-k;i++){
				if (i==0) zbir = zbir - d[x-1] + x*a[k];
	 			else zbir = zbir - (d[i+x-1]-d[i-1]) + x*a[i+k];
				cout<<zbir<<'\n';
				
			}
			
			
		}
		/*
6 4 3
1 2 3 4 5 6
		*/
	
	return 0;
}