#include <bits/stdc++.h>
int k;
long long n, m, a[10000 + 10];
void Read(long long &x) {
  char c;
  while (c = getchar(), c != EOF) {
    if (c >= '0' && c <= '9') {
      x = c - '0';
      while (c = getchar(), c >= '0' && c <= '9') x = x * 10 + c - '0';
      ungetc(c, stdin);
      return;
    }
  }
}
void exgcd(long long a, long long b, long long &d, long long &x, long long &y) {
  if (!b) {
    x = 1, y = 0;
    d = a;
    return;
  }
  exgcd(b, a % b, d, y, x);
  y -= (a / b) * x;
}
int main() {
  Read(n), Read(m);
  scanf("%d", &k);
  long long lcm = 1, x, d, p, q;
  bool flag = true;
  for (int i = 1; i <= k; i++) {
    Read(a[i]);
    exgcd(lcm, a[i], d, p, q);
    lcm = lcm / d * a[i];
    if (lcm > n || lcm < 0) flag = false;
  }
  if (!flag) {
    puts("NO");
    return 0;
  }
  lcm = 1, x = 0;
  for (int i = 1; i <= k; i++) {
    exgcd(lcm, a[i], d, p, q);
    if ((-i + 1 - x) % d) {
      flag = false;
      break;
    }
    (p *= (-i + 1 - x) / d) %= a[i];
    x += lcm * p;
    lcm = lcm / d * a[i];
    x = (x % lcm + lcm) % lcm;
  }
  if (!flag) {
    puts("NO");
    return 0;
  }
  if (!x) x = lcm;
  for (long long i = x; i <= x + k - 1 && i <= m; i++) {
    exgcd(i, lcm, d, p, q);
    if (d != a[i - x + 1]) {
      flag = false;
      break;
    }
  }
  if (x + k - 1 > m) flag = false;
  if (!flag)
    puts("NO");
  else
    puts("YES");
  return 0;
}
