#include<bits/stdc++.h>
#define P pair<int,int>
#define se second
#define fi first
#define pb push_back
using namespace std;
const int N=1e6+9;
int a[N],n,m,k,sum[N],minn[N],vis[N],blacknum[N],whitenum[N],blackvis[N],cnt,gx[9]={1,0,-1,0},gy[9]={0,1,0,-1};vector<int>e[N];
inline P change1(int x){return {x/m+1-(x%m==0),(x%m==0)?m:x%m};}
inline int change2(P x){return x.fi*m+x.se-m;}inline bool check(int x){P tmp=change1(x);if(tmp.fi<1 || tmp.fi>n || tmp.se<1 || tmp.se>m)return 0;return 1;}
inline void dfs(int x,int col){cout<<change1(x).fi<<" "<<change1(x).se<<endl;vis[x]=1;sum[col]+=a[x];minn[col]=min(minn[col],a[x]);if(blackvis[x])blacknum[col]++;else whitenum[col]++;for(auto i:e[x])if(!vis[i])dfs(i,col);}
inline void Build(int x){P f=change1(x);for(int i=0;i<4;i++){int tmp=change2({f.fi+gx[i],f.se+gy[i]});if(!check(tmp))continue;;e[tmp].pb(x);e[x].pb(tmp);}}
int main()
{
cin>>n>>m;for(int i=1;i<=n*m;i++)cin>>a[i];memset(minn,0x3f,sizeof(minn));int ans=0;
cin>>k;for(int i=1;i<=k;i++){int tmpx,tmpy;cin>>tmpx>>tmpy;tmpx++;tmpy++;Build(change2({tmpx,tmpy}));blackvis[change2({tmpx,tmpy})]=1;}
for(int i=1;i<=n*m;i++)if(!vis[i])dfs(i,++cnt),cout<<endl;for(int i=1;i<=cnt;i++)if(whitenum[i]*3<blacknum[i])return cout<<"No",0;else{if(whitenum[i]*3==blacknum[i])ans+=sum[i];else ans+=sum[i]-minn[i];}
cout<<ans;return 0;
}