#include <iostream>

using namespace std;

int neobojeno(int x, int y, int** A, int N, int M)
{
	if ((y < 0) || (y >= M) || (x < 0) || (x >= N) || (A[x][y] == 1))
		return 0;

	A[x][y] = 1;

	return 1 + neobojeno(x - 1, y, A, N, M) + neobojeno(x + 1, y, A, N, M) + neobojeno(x, y - 1, A, N, M) + neobojeno(x, y + 1, A, N, M);
}

int main()
{
	int N = 0, M = 0, K = 0;
	cin >> N >> M >> K;

	// napravi matricu sa koordinatama crnh polja
	int** A = new int* [N];
	for (int i = 0; i < N; ++i)
	{
		A[i] = new int[M]();
	}

	int ai, bi;
	for (int i = 0; i < K; ++i)
	{
		cin >> ai >> bi;
		A[ai - 1][bi - 1] = 1;
	}

	int broj_povrsina = 0;


	for (int i = 0; i < N; ++i)
	{
		for (int j = 0; j < M; ++j)
		{
			if (A[i][j] == 0)
			{
				if (int broj_polja = neobojeno(i, j, A, N, M))
				{
					broj_povrsina++;
				}
			}
		}
	}

	cout << broj_povrsina;

	// izbrisi matricu iz memorije
	for (int i = 0; i < N; ++i)
	{
		delete[] A[i];
	}
	delete[] A;

	return 0;
}