#include <iostream>
using namespace std;
const int MAXN = 33;
bool map[MAXN*MAXN][MAXN*MAXN];
bool hash[MAXN][MAXN];
int pre[MAXN*MAXN];
bool fuck[MAXN*MAXN];
int nu[MAXN][MAXN];
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int cnt, n, m, k;
bool dfs(int now)
{
int i, j;
for (i = 0; i < cnt; ++i)
{
if (map[now][i] && !fuck[i])
{
fuck[i] = true;
if (pre[i] == -1 || dfs(pre[i]))
{
pre[i] = now;
return true;
}
}
}
return false;
}
int main()
{
while (scanf("%d %d %d", &n, &m, &k) != EOF)
{
memset(hash, 0, sizeof(hash));
int i, j;
for (i = 0; i < n*m; ++i)
{
pre[i] = -1;
for (j = 0; j < n*m; ++j)
{
map[i][j] = 0;
}
}
for (i = 0; i < k; ++i)
{
int x, y;
scanf("%d %d", &y, &x);
hash[x-1][y-1] = true;
}
if ((n*m-k) % 2)
{
printf("NO\n");
continue;
}
cnt = 0;
for (i = 0; i < n; ++i)
{
for (j = 0; j < m; ++j)
{
if (!hash[i][j])
{
nu[i][j] = cnt++;
}
}
}
for (i = 0; i < n; ++i)
{
for (j = 0; j < m; ++j)
{
if (!hash[i][j])
{
for (int p = 0; p < 4; ++p)
{
int fx, fy;
fx = i + dir[p][0];
fy = j + dir[p][1];
if (fx >= 0 && fx < n && fy >= 0 && fy < m && !hash[fx][fy])
{
map[nu[i][j]][nu[fx][fy]] = true;
}
}
}
}
}
int num = 0;
for (i = 0; i < cnt; ++i)
{
memset(fuck, 0, sizeof(fuck));
if (dfs(i))
{
num++;
}
}
if(num+k == n*m)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}