#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 6;
long long n, m, k, a[N];
struct PII {
  long long x, y, z;
  PII(long long X = 0, long long Y = 0, long long Z = 0) {
    x = X, y = Y, z = Z;
  }
};
PII exgcd(long long a, long long b) {
  if (!b) return PII(1, 0, a);
  PII t = exgcd(b, a % b);
  return PII(t.y, t.x - (a / b) * t.y, t.z);
}
long long gcd(long long x, long long y) { return y ? gcd(y, x % y) : x; }
long long add(long long a, long long b, long long c) {
  long long r(0), s(a);
  for (; b; b >>= 1, s = (s + s) % c)
    if (b & 1) r = (r + s) % c;
  return r;
}
int Row() {
  long long cur(1);
  for (int i = 0; i < k; i++) {
    long long g = gcd(cur, a[i]);
    if (cur / g > n / a[i]) return 0;
    cur *= a[i] / g;
  }
  return 1;
}
int Col() {
  long long r(0), cr(a[0]);
  for (int i = 1; i < k; i++) {
    if ((r ? r : cr) + k - 1 > m) return 0;
    long long dr = cr * a[i] / gcd(cr, a[i]);
    long long dk = ((a[i] - i) % a[i] + a[i]) % a[i];
    PII t = exgcd(cr, a[i]);
    if ((dk - r) % t.z) return 0;
    long long ti = ((((dk - r) / t.z) % a[i]) + a[i]) % a[i];
    (r += (cr * add(t.x, ti, a[i])) % dr) %= dr;
    cr = dr;
  }
  ((r %= cr) += cr) %= cr;
  if ((r ? r : cr) + k - 1 > m) return 0;
  for (long long i = r ? r : cr, j = 0; j < k; j++, i++)
    if (gcd(cr, i) != a[j]) return 0;
  return 1;
}
int main() {
  scanf("%I64d%I64d%I64d", &n, &m, &k);
  for (int i = 0; i < k; i++) scanf("%I64d", &a[i]);
  if (Row() && Col())
    puts("YES");
  else
    puts("NO");
  return 0;
}
