#include<bits/stdc++.h>
using namespace std;
int R, C, N, r, c;
int num[300][300];
int all[301]={};//全部的數字有幾種
int sub[301]={};
int nowN;//現在的數字有幾種
void recount(int lx,int ly){
for(int n=0; n<=N; n+=1)
sub[n]=0;
for(int dx=0; dx<r; dx+=1)
for(int dy=0; dy<c; dy+=1){
int color=num[ lx+dx ][ ly+dy ];
sub[ color ]+=1;
nowN-= sub[ color ]==all[ color ];
}
}
int main(){
int allN=0;
cin>>R>>C>>N>>r>>c;
for(int x=0; x<R; x+=1)
for(int y=0; y<C; y+=1){
cin>>num[x][y];
allN+= all[ num[x][y] ]==0;
all[ num[x][y] ]+=1;
}
//
for(int Lx=0; Lx<=R-r; Lx+=1){
// mask 對齊最左側時才需要重算
nowN=allN;
recount(Lx,0);
cout<<nowN;
// sliding window
for(int Ly=1; Ly<=C-c; Ly+=1){
// 讓最左邊的 column 露出來
for(int dx=0; dx<r; dx+=1){
int color=num[Lx+dx][Ly-1];
nowN+= sub[color]==all[color];
sub[color]-=1;
}
// 讓最右邊的 column 遮起來
for(int dx=0; dx<r; dx+=1){
int color=num[Lx+dx][Ly+c-1];
sub[color]+=1;
nowN-= sub[color]==all[color];
}
cout<<" "<<nowN;
}
cout<<"\n";
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAppbnQgUiwgQywgTiwgciwgYzsKaW50IG51bVszMDBdWzMwMF07CmludCBhbGxbMzAxXT17fTsvL+WFqOmDqOeahOaVuOWtl+acieW5vueorgppbnQgc3ViWzMwMV09e307CmludCBub3dOOy8v54++5Zyo55qE5pW45a2X5pyJ5bm+56iuCiAKdm9pZCByZWNvdW50KGludCBseCxpbnQgbHkpewoJZm9yKGludCBuPTA7IG48PU47IG4rPTEpCgkJc3ViW25dPTA7Cglmb3IoaW50IGR4PTA7IGR4PHI7IGR4Kz0xKQoJCWZvcihpbnQgZHk9MDsgZHk8YzsgZHkrPTEpewoJCQlpbnQgY29sb3I9bnVtWyBseCtkeCBdWyBseStkeSBdOwoJCQlzdWJbIGNvbG9yIF0rPTE7CgkJCW5vd04tPSBzdWJbIGNvbG9yIF09PWFsbFsgY29sb3IgXTsKCQl9Cn0KaW50IG1haW4oKXsKCWludCBhbGxOPTA7CiAKCWNpbj4+Uj4+Qz4+Tj4+cj4+YzsKCWZvcihpbnQgeD0wOyB4PFI7IHgrPTEpCgkJZm9yKGludCB5PTA7IHk8QzsgeSs9MSl7CgkJCWNpbj4+bnVtW3hdW3ldOwoJCQlhbGxOKz0gYWxsWyBudW1beF1beV0gXT09MDsKCQkJYWxsWyBudW1beF1beV0gXSs9MTsKCQl9CgkvLyAKCWZvcihpbnQgTHg9MDsgTHg8PVItcjsgTHgrPTEpewoJCS8vIG1hc2sg5bCN6b2K5pyA5bem5YG05pmC5omN6ZyA6KaB6YeN566XCgkJbm93Tj1hbGxOOwoJCXJlY291bnQoTHgsMCk7CgkJY291dDw8bm93TjsKCQkvLyBzbGlkaW5nIHdpbmRvdwoJCWZvcihpbnQgTHk9MTsgTHk8PUMtYzsgTHkrPTEpewoJCQkvLyDorpPmnIDlt6bpgornmoQgY29sdW1uIOmcsuWHuuS+hgoJCQlmb3IoaW50IGR4PTA7IGR4PHI7IGR4Kz0xKXsKCQkJCWludCBjb2xvcj1udW1bTHgrZHhdW0x5LTFdOwoJCQkJbm93Tis9IHN1Yltjb2xvcl09PWFsbFtjb2xvcl07CgkJCQlzdWJbY29sb3JdLT0xOwoJCQl9CgkJCS8vIOiuk+acgOWPs+mCiueahCBjb2x1bW4g6YGu6LW35L6GCgkJCWZvcihpbnQgZHg9MDsgZHg8cjsgZHgrPTEpewoJCQkJaW50IGNvbG9yPW51bVtMeCtkeF1bTHkrYy0xXTsKCQkJCXN1Yltjb2xvcl0rPTE7CgkJCQlub3dOLT0gc3ViW2NvbG9yXT09YWxsW2NvbG9yXTsKCQkJfQoJCQljb3V0PDwiICI8PG5vd047CgkJfQoJCWNvdXQ8PCJcbiI7Cgl9CiAKfQ==