#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
using std::max;
using std::min;
using std::pair;
using std::priority_queue;
using std::queue;
using std::set;
using std::sort;
using std::vector;
const long long maxN = (long long)1e12;
const int maxK = 10000 + 233;
long long n, m, a[maxK];
int k;
long long gcd(long long a, long long b) { return !b ? a : gcd(b, a % b); }
long long combine(long long &r, long long &m, long long rr, long long mm) {
  if (mm > m) {
    std::swap(r, rr);
    std::swap(m, mm);
  }
  while (r % mm != rr) r += m;
  m *= mm;
}
bool solve() {
  long long lcm = 1;
  for (int i = 1; i <= k; ++i) {
    long long g = gcd(lcm, a[i]);
    lcm /= g;
    if ((double)lcm * a[i] > 1e15) return false;
    lcm *= a[i];
  }
  if (n < lcm) return false;
  vector<long long> power, rem;
  long long tmp = lcm;
  for (long long i = 2; i * i <= tmp; ++i) {
    if (tmp % i == 0) {
      long long inp = 1;
      while (tmp % i == 0) inp *= i, tmp /= i;
      power.push_back(inp);
    }
  }
  if (tmp > 1) power.push_back(tmp);
  rem.resize(power.size());
  for (int i = 0; i < power.size(); ++i) {
    long long pn = power[i];
    long long &r = rem[i];
    for (int j = 1; j <= k; ++j)
      if (a[j] % pn == 0) {
        r = (-j) % pn;
        if (r < 0) r += pn;
        break;
      }
  }
  long long ans = 0, mod = 1;
  for (int j = 0; j < power.size(); ++j) combine(ans, mod, rem[j], power[j]);
  if (ans + k > m) return false;
  for (int i = 1; i <= k; ++i)
    if (a[i] != gcd(lcm, ans + i)) return false;
  return true;
}
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= k; ++i) cin >> a[i];
  printf("%s\n", solve() ? "YES" : "NO");
  return 0;
}
