#include <bits/stdc++.h>
long long extendedGCD(long long a, long long b, long long &x, long long &y);
long long GCD(long long a, long long b);
void NO();
int main() {
  long long n(0), m(0), x(0), y(0), d(0), L(0), U0(0), A[10001] = {0};
  int k(0);
  std::cin >> n >> m >> k >> A[1];
  if (k > n) NO();
  L = A[1];
  for (int h = 2; h <= k; ++h) {
    std::cin >> A[h];
    d = extendedGCD(L, A[h], x, y);
    if ((-h + 1 - U0) % d) NO();
    U0 += (x * (-h + 1 - U0) / d) % (A[h] / d) * L;
    L = L / d * A[h];
    if (L > n) NO();
    U0 = (U0 % L + L) % L;
  }
  if (!U0) U0 = L;
  if (U0 + k - 1 > m) NO();
  for (int h = 1; h <= k; ++h)
    if (GCD(L, U0 + h - 1) != A[h]) NO();
  printf("YES");
  return 0;
}
long long extendedGCD(long long a, long long b, long long &x, long long &y) {
  if (!b) {
    x = 1;
    y = 0;
    return a;
  }
  long long tp = extendedGCD(b, a % b, x, y);
  long long t = x;
  x = y;
  y = t - a / b * x;
  return tp;
}
long long GCD(long long a, long long b) {
  long long cnt2(1);
  while (a && b) {
    while (!(a & 1) && !(b & 1)) {
      a >>= 1;
      b >>= 1;
      cnt2 *= 2;
    }
    while (!(a & 1)) a >>= 1;
    while (!(b & 1)) b >>= 1;
    if (a < b)
      b -= a;
    else
      a -= b;
  }
  if (!a)
    return b * cnt2;
  else
    return a * cnt2;
}
void NO() {
  printf("NO");
  exit(0);
}
