#include <bits/stdc++.h>
using namespace std;
long long ar[10010];
long long N, M;
int K;
long long gcd(long long a, long long b) {
  if (a > b) swap(a, b);
  if (a == 0)
    return b;
  else
    return gcd(b % a, a);
}
long long getRow() {
  long long lcm = ar[0];
  long long ret;
  for (int i = 1; i < K; i++) {
    ret = gcd(lcm, ar[i]);
    lcm = lcm / ret;
    if (1.0 * ar[i] * lcm > 1e15) return N + 1;
    lcm = lcm * ar[i];
  }
  return lcm;
}
pair<long long, long long> update(pair<long long, long long> pp, long long rem,
                                  long long p) {
  long long a = pp.first;
  long long b = pp.second;
  if (b < p) {
    swap(b, p);
    swap(a, rem);
  }
  while (a % p != rem) {
    a = a + b;
  }
  return make_pair(a, b * p);
}
long long getCol(long long x) {
  vector<pair<long long, int> > primes;
  int cnt;
  for (long long j = 2LL; j * j <= x; j++) {
    if (x % j == 0) {
      cnt = 0;
      while (x % j == 0) {
        cnt++;
        x = x / j;
      }
      primes.push_back(make_pair(j, cnt));
    }
  }
  if (x > 1) primes.push_back(make_pair(x, 1));
  int s = primes.size();
  vector<long long> rem, pow_;
  long long r;
  cnt = 0;
  for (int i = 0; i < s; i++) {
    pow_.push_back(1LL);
    cnt = primes[i].second;
    r = primes[i].first;
    for (int j = 0; j < cnt; j++) pow_[i] = pow_[i] * r;
    for (int j = 0; j < K; j++) {
      if (ar[j] % pow_[i] == 0) {
        r = -j % pow_[i];
        r = (r + pow_[i]) % pow_[i];
        rem.push_back(r);
        break;
      }
    }
  }
  long long num = 0LL, den = 1LL;
  pair<long long, long long> pp;
  pp = make_pair(num, den);
  for (int i = 0; i < s; i++) {
    pp = update(pp, rem[i], pow_[i]);
  }
  return pp.first;
}
int main() {
  cin >> N >> M >> K;
  for (int i = 0; i < K; i++) cin >> ar[i];
  for (int i = 0; i < K; i++) {
    if (ar[i] > N or ar[i] > M) {
      printf("NO\n");
      return 0;
    }
  }
  if (K == 1) {
    printf("YES\n");
    return 0;
  }
  long long row = getRow();
  if (row > N) {
    printf("NO\n");
    return 0;
  }
  long long col = getCol(row);
  if (col + K - 1 > M) {
    printf("NO\n");
    return 0;
  }
  for (int i = 0; i < K; i++) {
    if (ar[i] != gcd(row, col + i)) {
      printf("NO\n");
      return 0;
    }
  }
  printf("YES\n");
  return 0;
}
