#include<bits/stdc++.h>
using namespace std;
int m,n,t;
struct node
{
int left,num;
}ans[1001];
int a[1001],tt[1001];
inline const void read(int &a)
{
a=0;
int k=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')
k=-1;
c=getchar();
}
while(c<='9'&&c>='0')
{
a=(a<<1)+(a<<3)+c-'0';
c=getchar();
}
a*=k;
}
int main()
{
cin>>n>>m>>t;
for(int i=1;i<=m;i++)
{
for(int j=0;j<=1001&&ans[j].left;j++)
{
ans[j].left=0;
ans[j].num=0;
}
int front=0,rail=0,MAX=0;
for(int j=1;j<=n;j++)
{
read(a[j]);
if(ans[j-1].num==0&&ans[j-1].left==0)
{
ans[j].left=j;
ans[j].num=a[j];
MAX=a[j];
front=j;
rail=j;
}
else if(ans[j-1].num<0)
{
ans[j].left=j;
ans[j].num=a[j];
if(MAX<=ans[j].num)
{
MAX=ans[j].num;
front=j;
rail=j;
}
}
else if(ans[j-1].num>=0)
{
if(j-ans[j-1].left<=t-1)
{
ans[j].left=ans[j-1].left;
ans[j].num=ans[j-1].num+a[j];
if(ans[j].num>=MAX)
{
MAX=ans[j].num;
front=ans[j].left;
rail=j;
}
}
else if(j-ans[j-1].left>t-1)
{
int ks=ans[j-1].num+a[j],MAX1=-100000,kt;
for(int ss=ans[j-1].left;ss<j;ss++)
{
ks-=a[ss];
if(ks>MAX1)
{
MAX1=ks;
kt=ss;
}
}
ans[j].num=max(MAX1,a[j]);
if(ans[j].num==a[j])
ans[j].left=j;
else ans[j].left=kt+1;
if(ans[j].num>=MAX)
{
MAX=ans[j].num;
front=ans[j].left;
rail=j;
}
}
}
}
for(int j=front;j<=rail;j++)
tt[j]++;
}
for(int i=1;i<=n;i++)
cout<<tt[i]<<' ';
cout<<endl;
return 0;
}