A了大部分点
#include<bits/stdc++.h>
using namespace std;
const int N=2e7+10;
#define int long long
typedef long long ll;
#define F(i,k,n) for (ll i=k;i<=n;i++)
ll n,m,x,p,q;
ll mp[3001][3001];
int dy[5]={0,0,1,-1};
int dx[5]={1,-1,0,0};
bool Map[3001][3001];
struct node{
ll x,y;
}l[N];
ll tot;
struct note{
ll x,y;
ll s;
bool operator < (const note& a) const{
return a.s<this->s;
}
};
priority_queue <note> Q;
signed main(){
cin>>n>>m>>x>>p>>q;
F(i,1,n){
F(j,1,m){
cin>>mp[i][j];
}
}
tot=1;
l[1]=(node){p,q};
Map[p][q]=1;
ll sum=mp[p][q];
while (1){
F(i,0,3){
int x2=l[tot].x+dx[i],y2=l[tot].y+dy[i];
if (x2>0 && y2>0 && x2<=n && y2<=m && Map[x2][y2]==0){
Map[x2][y2]=1;
Q.push((note){x2,y2,mp[x2][y2]});
}
}
int y;
if (sum%x==0) y=sum/x;
else y=sum/x+1;
if (Q.top().s>=y) break;
sum+=Q.top().s;
tot++;
l[tot]=(node){Q.top().x,Q.top().y};
Q.pop();
}
cout<<sum;
return 0;
}