#include <bits/stdc++.h>
using namespace std;
long long get_gcd(long long m, long long n) {
  while (n != 0) {
    long long t = m % n;
    m = n;
    n = t;
  }
  return m;
}
long long get_lcm(long long arr[], int k) {
  long long lcm = 1;
  for (int i = 0; i < k; ++i) lcm = lcm / get_gcd(lcm, arr[i]) * arr[i];
  return lcm;
}
void extEuclid(long long a, long long b, long long &x, long long &y,
               long long &gcd) {
  x = 0, y = 1, gcd = b;
  long long m, n, q, r;
  for (long long u = 1, v = 0; a != 0; gcd = a, a = r) {
    q = gcd / a;
    r = gcd % a;
    m = x - u * q;
    n = y - v * q;
    x = u;
    y = v;
    u = m;
    v = n;
  }
}
bool solve(long long n, long long m, int k, long long arr[]) {
  long long row = get_lcm(arr, k);
  if (row < 1 || n < row) return false;
  long long col, rem = 0;
  long long A = arr[0], r1 = rem;
  for (int i = 1; i < k; ++i) {
    long long B = arr[i], r2 = --rem;
    long long x, y, gcd, diff = r2 - r1;
    extEuclid(A, B, x, y, gcd);
    if (diff % gcd) return false;
    long long mod = B / gcd;
    x = x * diff / gcd;
    x = ((x % mod) + mod) % mod;
    col = A * x + r1;
    A = A * B / gcd;
    r1 = col;
  }
  if (col == 0) col = row;
  if (col < 1 || m - k + 1 < col) return false;
  for (int i = 0; i < k; ++i)
    if (get_gcd(row, col + i) != arr[i]) return false;
  return true;
}
int main() {
  long long n, m;
  int k;
  scanf("%I64d %I64d %d", &n, &m, &k);
  long long arr[k + 3];
  for (int i = 0; i < k; ++i) scanf("%I64d", arr + i);
  puts(solve(n, m, k, arr) ? "YES" : "NO");
  return 0;
}
