#include <bits/stdc++.h>
long long n, m, W, g, k, a[10007], b[10007];
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
void exgcd(long long a, long long b, long long &x, long long &y) {
  if (!b)
    g = a, x = 1, y = 0;
  else
    exgcd(b, a % b, y, x), y -= a / b * x;
}
long long add(long long a, long long b, long long c) {
  long long res = 0, f = 1;
  if (a < 0) f *= -1, a = -a;
  if (b < 0) f *= -1, b = -b;
  while (b) {
    if (b & 1) res = (res + a) % c;
    a = (a + a) % c, b >>= 1;
  }
  return res * f;
}
long long China() {
  long long A = a[1], B = b[1], x, y;
  for (int i = 2; i <= k; i++) {
    exgcd(A, a[i], x, y);
    if ((b[i] - B) % g) return -1;
    long long w = a[i] / g;
    x = add(x, (b[i] - B) / g, w);
    x = (x % w + w) % w;
    B += A * x, A *= w, B = (B + A) % A;
    if (B > m) return -1;
  }
  W = A;
  return B ? B : A;
}
int main() {
  scanf("%lld%lld%lld", &n, &m, &k);
  for (int i = 1; i <= k; i++)
    scanf("%lld", &a[i]), b[i] = (1 - i + a[i]) % a[i];
  long long c = China();
  if (c == -1 || c + k - 1 > m || W > n)
    puts("NO");
  else {
    bool f = 0;
    for (int i = 1; i <= k; i++)
      if (gcd(c + i - 1, W) != a[i]) {
        f = 1;
        break;
      }
    puts(f ? "NO" : "YES");
  }
  return 0;
}
