#include <cstdio>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <climits>
#include <cfloat>
using namespace std;

int dy[] = {0, 1, -1, 0};
int dx[] = {1, 0, 0, -1};

int h, w;
vector<vector<int> > height;
vector<vector<bool> > house;

int solve()
{
    int ret = 0;
    for(int y0=1; y0<=h; ++y0){
        for(int x0=1; x0<=w; ++x0){
            bool ng = false;
            int surround = INT_MAX;
            queue<pair<int, int> > q;
            q.push(make_pair(y0, x0));
            vector<vector<bool> > check(h+2, vector<bool>(w+2, false));
            check[y0][x0] = true;
            while(!q.empty()){
                int y = q.front().first;
                int x = q.front().second;
                q.pop();
                if(house[y][x]){
                    ng = true;
                    break;
                }

                for(int i=0; i<4; ++i){
                    int y2 = y + dy[i];
                    int x2 = x + dx[i];
                    if(height[y2][x2] <= height[y0][x0]){
                        if(!check[y2][x2]){
                            q.push(make_pair(y2, x2));
                            check[y2][x2] = true;
                        }
                    }else{
                        surround = min(surround, height[y2][x2]);
                    }
                }
            }

            if(ng)
                continue;

            int ret2 = 0;
            q.push(make_pair(y0, x0));
            check[y0][x0] = false;
            while(!q.empty()){
                int y = q.front().first;
                int x = q.front().second;
                q.pop();
                ret2 += surround - height[y][x];

                for(int i=0; i<4; ++i){
                    int y2 = y + dy[i];
                    int x2 = x + dx[i];
                    if(check[y2][x2]){
                        q.push(make_pair(y2, x2));
                        check[y2][x2] = false;
                    }
                }
            }
            ret = max(ret, ret2);
        }
    }

    return ret;
}

int main()
{
    for(;;){
        int c, r;
        cin >> h >> w >> c >> r;
        if(h == 0)
            return 0;

        height.assign(h+2, vector<int>(w+2, -1));
        for(int i=1; i<=h; ++i){
            for(int j=1; j<=w; ++j){
                cin >> height[i][j];
            }
        }

        house.assign(h+2, vector<bool>(w+2, false));
        for(int i=1; i<=h; ++i)
            house[i][0] = house[i][w+1] = true;
        for(int i=1; i<=w; ++i)
            house[0][i] = house[h+1][i] = true;
        for(int i=0; i<r; ++i){
            int y, x;
            cin >> y >> x;
            house[y][x] = true;
        }

        if(solve() >= c){
            cout << "Yes" << endl;
            continue;
        }

        bool ok = false;
        for(int i=1; i<=h; ++i){
            for(int j=1; j<=w; ++j){
                if(house[i][j])
                    continue;

                ++ height[i][j];
                if(solve() >= c){
                    ok = true;
                    break;
                }
                -- height[i][j];
            }
        }

        if(ok)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
}

Measured memory_bytes: 1224