#include <fstream>
#include <iostream>

using namespace std;

#define Nmax 70
#define Mmax 70

int main(int argc, char **argv)
{
	int field[Nmax][Mmax];
	bool mark[Nmax][Nmax];
	int i, j, N, M;
	
	ifstream inFile(argv[1]);
	ifstream studentFile(argv[2]);
	ifstream outFile(argv[3]);
	
	inFile >> N >> M;
	for (i = 0; i < N; i++)
		for (j = 0; j < M; j++)
		{
			inFile >> field[i][j];
			mark[i][j] = false;
		}
	
	i = 0;
	int stAns, trueAns, x, y, xp, yp;
	bool ok = true, length_ok = true;
	int state = 0;
		
	studentFile >> stAns;
	outFile >> trueAns;
	if (stAns != trueAns)
	{
		ok = false;
		length_ok = false;
	}

	i = 0;
	while (ok && (i < trueAns))
	{
		if (studentFile.eof())
			ok = false;
		else
		{
			studentFile >> x >> y;
			if ((x >= 1) && (x <= N) && (y >= 1) && (y <= M))
			{
				if (mark[x - 1][y - 1])
					ok = false;
				else
				{			
					mark[x - 1][y - 1] = true;
					
					switch (state)
					{
						case 0 :
							state = 1;
							break;
						case 1 :
							if (!(((x == xp) && (abs(y - yp) == 1)) || ((abs(x - xp) == 1) && (y == yp))))
								ok = false;
							else
								if (field[x - 1][y - 1] > field[xp - 1][yp - 1])
									state = 2;
							break;
						case 2 :
							if (!(((x == xp) && (abs(y - yp) == 1)) || ((abs(x - xp) == 1) && (y == yp))))
								ok = false;
							else
								if (field[x - 1][y - 1] < field[xp - 1][yp - 1])
									ok = false;
							break;
							
					}
					
					xp = x;
					yp = y;
				}
			}
			else
				ok = false;
		}
			
		i++;
	}
	
	inFile.close();
	studentFile.close();
	outFile.close();
	
	if (ok)
		cout << 10 << endl;
	else if (length_ok)
		cout << 5 << endl;
	else
		cout << 0 << endl;
	
	return 0;
}
