#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1e5 + 5;
const long long oo = 1LL << 50;
inline long long read() {
  char ch = getchar();
  long long x = 0, f = 1;
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
long long N, M, K, m[MAXN], lcm = 1, a[MAXN], a1, m1;
namespace solution {
long long gcd(long long a, long long b) { return !b ? a : gcd(b, a % b); }
void exgcd(long long a, long long b, long long &x, long long &y) {
  if (!b) {
    x = 1;
    y = 0;
    return;
  }
  exgcd(b, a % b, y, x);
  y -= a / b * x;
}
void CRT() {
  a1 = a[1];
  m1 = m[1];
  for (long long i = 2; i <= K; i++) {
    long long a2 = a[i], m2 = m[i], x, y, d = gcd(m1, m2);
    if ((a2 - a1) % d) {
      a1 = oo;
      return;
    }
    exgcd(m1, m2, x, y);
    long long mod = m2 / d;
    x = ((x * ((a2 - a1) / d) % mod + mod) % mod + mod) % mod;
    a1 += x * m1;
    m1 = m1 * m2 / d;
    a1 = (a1 + m1) % m1;
  }
}
void Prepare() {
  N = read();
  M = read();
  K = read();
  for (long long i = 1; i <= K; i++) {
    m[i] = read();
    a[i] = 1 - i;
    lcm = lcm / gcd(lcm, m[i]) * m[i];
  }
}
void Solve() {
  if (lcm > N)
    puts("NO");
  else {
    CRT();
    if (a1 + K - 1 > M || a1 < 0)
      puts("NO");
    else {
      if (a1 == 0) a1 = lcm;
      if (a1 + K - 1 > M) {
        puts("NO");
        return;
      }
      for (long long i = 1; i <= K; i++)
        if (gcd(lcm, a1 + i - 1) != m[i]) {
          puts("NO");
          return;
        }
      puts("YES");
    }
  }
}
}  // namespace solution
int main() {
  using namespace solution;
  Prepare();
  Solve();
  return 0;
}
