#include<bits/stdc++.h>
using namespace std;
#define int long long
const int INF=9e15+10;
int sum[100009],ans=INF;
int n,m,q;
int a[100009];
vector<pair<int,int> > g[100009];
bool flag=1;
int dis[100009][59];
priority_queue< pair<int,int>,vector< pair<int,int> >,
greater< pair<int,int> > > qu;
void dij(int st,int ret){
qu.push(make_pair(dis[st][ret],st));
while(!qu.empty()){
int u=qu.top().second;
qu.pop();
for(int i=0;i<g[u].size();i++){
int v=g[u][i].first;
int w=g[u][i].second;
if(dis[v][ret]>dis[u][ret]+w){
dis[v][ret]=dis[u][ret]+w;
qu.push(make_pair(dis[v][ret],v));
}
}
}
}
signed main()
{
for(int i=1;i<=100009;i++) sum[i]=-INF;
ios::sync_with_stdio(0);
cin>>n>>m>>q;
for(int i=1;i<=n*m;i++) cin>>a[i];
for(int i=1;i<=n*m;i++){
if(i%m!=1&&a[i-1]+a[i]<0) flag=0;
if(i-m>=1&&a[i-m]+a[i]<0) flag=0;
}
if(!flag){
cout<<"No";
return 0;
}
for(int i=1;i<=n*m;i++){
if(i%m!=1) g[i].push_back(make_pair(i-1,a[i-1]));
if(i%m!=0) g[i].push_back(make_pair(i+1,a[i+1]));
if(i-m>=1) g[i].push_back(make_pair(i-m,a[i-m]));
if(i+m<=n*m) g[i].push_back(make_pair(i+m,a[i+m]));
}
for(int i=1;i<=q;i++){
int x,y;
cin>>x>>y;
for(int j=1;j<=n*m;j++) dis[j][i]=INF;
dis[m*(x-1)+y][i]=a[m*(x-1)+y];
dij(m*(x-1)+y,i);
for(int j=1;j<=n*m;j++){
sum[j]=max(sum[j],dis[j][i]);
}
}
for(int i=1;i<=n*m;i++){
ans=min(ans,sum[i]);
}
cout<<ans<<endl;
return 0;
}