#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int x, y;
int n, m, k;
long long res;
int first = 1;
vector<int> row[maxn], line[maxn];
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= k; i++) {
    scanf("%d%d", &x, &y);
    row[x].push_back(y);
    line[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) sort(row[i].begin(), row[i].end());
  for (int i = 1; i <= m; i++) sort(line[i].begin(), line[i].end());
  int dir = 0;
  int l = 0, r = m + 1, u = 0, d = n + 1;
  int x = 1, y = 1;
  while (1) {
    int newx, newy;
    if (dir == 0) {
      newx = x;
      int pos = lower_bound(row[x].begin(), row[x].end(), y) - row[x].begin();
      if (pos == row[x].size())
        newy = r - 1;
      else
        newy = min(r - 1, row[x][pos] - 1);
      u = x;
    } else if (dir == 1) {
      newy = y;
      int pos =
          lower_bound(line[y].begin(), line[y].end(), x) - line[y].begin();
      if (pos == line[y].size())
        newx = d - 1;
      else
        newx = min(d - 1, line[y][pos] - 1);
      r = y;
    } else if (dir == 2) {
      newx = x;
      int pos =
          lower_bound(row[x].begin(), row[x].end(), y) - row[x].begin() - 1;
      if (pos < 0)
        newy = l + 1;
      else
        newy = max(l + 1, row[x][pos] + 1);
      d = x;
    } else {
      newy = y;
      int pos =
          lower_bound(line[y].begin(), line[y].end(), x) - line[y].begin() - 1;
      if (pos < 0)
        newx = u + 1;
      else
        newx = max(u + 1, line[y][pos] + 1);
      l = y;
    }
    dir = (dir + 1) % 4;
    long long add = (long long)abs(newx - x) + (long long)abs(newy - y);
    res += add;
    x = newx, y = newy;
    if (add == 0 && !first) break;
    first = 0;
  }
  if (res + 1 == (long long)n * m - k)
    printf("YES\n");
  else
    printf("NO\n");
}
