#include <stdio.h>
#include <iostream>
#define inf 1e9
using namespace std;
inline int read() {
int k=0;
char f=1;
char c=getchar();
for(; !isdigit(c); c=getchar() )
if(c=='-')
f=-1;
for(; isdigit(c); c=getchar() )
k=k*10+c-'0';
return k*f;
}
int n,m,t;
int s[5005][2500],a[5005][2500],ans[2500],Max[5002][2500],Min[5002][2500],MaxID[5002][2500],MinID[5002][2500],Q[2500];
void get_min(int line) {
int head,tail,i;
head=1;
tail=1;
Q[tail]=1;
Min[line][1]=s[line][0];
for (i=1; i<=n; i++) {
while ((head<=tail)&&(s[line][i]<s[line][Q[tail]]))
tail--;
Q[++tail]=i;
while ((head<=tail)&&(Q[head]<i-t+1))
head++;
Min[line][i]=s[line][Q[head]];
MinID[line][i] = Q[head];
}
}
void get_max(int line) {
int head,tail,i;
head=1;
tail=1;
Q[tail]=1;
Max[line][1]=s[line][0];
for (i=1; i<=n; i++) {
while ((head<=tail)&&(s[line][i]>s[line][Q[tail]]))
tail--;
Q[++tail]=i;
while ((head<=tail)&&(Q[head]<i-t+1))
head++;
Max[line][i]=s[line][Q[head]];
MaxID[line][i] = Q[head];
}
}
void solve(int line) {
int minid = 0,maxid = 0;
get_max(line);
get_min(line);
int maxx = 0;
for(int i = 1; i<=n; i++) {
if((!maxid&&!minid)||(Max[line][i]-Min[line][i]>maxx&&MaxID[line][i]-MinID[line][i]>0)) {
maxid = MaxID[line][i];
minid = MinID[line][i]+1;
maxx = Max[line][i] - Min[line][i];
} else if(Max[line][i]-Min[line][i]==maxx&&MaxID[line][i]-MinID[line][i]>maxid-minid) {
maxid = MaxID[line][i];
minid = MinID[line][i]+1;
maxx = Max[line][i] - Min[line][i];
}
}
if(minid==0&&maxid==0)return;
for(int i = minid; i<=maxid; i++) {
if(i-t>0)
ans[i-t]++;
}
}
int main() {
n =read();
m = read();
t = read();
t++;
for(int i = 1; i<=m; i++) {
for(int j = 1; j<=n; j++) {
a[i][j] = read();
s[i][j+t] = s[i][(j-1)+t]+a[i][j];
}
}
n+=t;
for(int i = 1; i<=m; i++) solve(i);
n-=t;
for(int i = 1; i<=n; i++) cout<<ans[i]<<" ";
return 0;
}