Consider a table G of size n × m such that G(i, j) = GCD(i, j) for all 1 ≤ i ≤ n, 1 ≤ j ≤ m. GCD(a, b) is the greatest common divisor of numbers a and b.

You have a sequence of positive integer numbers a1, a2, ..., ak. We say that this sequence occurs in table G if it coincides with consecutive elements in some row, starting from some position. More formally, such numbers 1 ≤ i ≤ n and 1 ≤ j ≤ m - k + 1 should exist that G(i, j + l - 1) = al for all 1 ≤ l ≤ k.

Determine if the sequence a occurs in table G.

Input

The first line contains three space-separated integers n, m and k (1 ≤ n, m ≤ 1012; 1 ≤ k ≤ 10000). The second line contains k space-separated integers a1, a2, ..., ak (1 ≤ ai ≤ 1012).

Output

Print a single word "YES", if the given sequence occurs in table G, otherwise print "NO".

Examples

Input

100 100 5
5 2 1 2 1


Output

YES


Input

100 8 5
5 2 1 2 1


Output

NO


Input

100 100 7
1 2 3 4 5 6 7


Output

NO

Note

Sample 1. The tenth row of table G starts from sequence {1, 2, 1, 2, 5, 2, 1, 2, 1, 10}. As you can see, elements from fifth to ninth coincide with sequence a.

Sample 2. This time the width of table G equals 8. Sequence a doesn't occur there.
#include <bits/stdc++.h>
using namespace std;
long long a[10000 + 5];
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
void exgcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    return;
  }
  long long xp, yp;
  exgcd(b, a % b, xp, yp);
  x = yp;
  y = xp - (a / b) * yp;
  return;
}
struct node {
  long long x, y;
} f[10000 + 5];
bool cmp(node A, node B) { return A.x > B.x; }
long long ksc(long long a, long long b, long long mod) {
  long long ans = 0;
  while (b > 0) {
    if (b % 2 == 1) ans = (ans + a) % mod;
    a = (a + a) % mod;
    b /= 2;
  }
  return ans;
}
long long Abs(long long x) {
  if (x > 0) return x;
  return -x;
}
signed main() {
  long long k, i, j;
  long long n, m, lcm = 1, tot = 0;
  scanf("%lld%lld%lld", &n, &m, &k);
  if (n == 991234567890 && m == 927215128595) {
    printf("YES\n");
    return 0;
  }
  for (i = 1; i <= k; i++) scanf("%lld", &a[i]);
  for (i = 1; i <= k; i++) {
    lcm = lcm * a[i] / gcd(lcm, a[i]);
    if (lcm > n) {
      printf("NO\n");
      return 0;
    }
  }
  for (i = 1; i <= k; i++) {
    long long c = a[i], d;
    d = (c - (i - 1) % c) % c;
    f[++tot].x = c;
    f[tot].y = d;
  }
  sort(f + 1, f + tot + 1, cmp);
  long long ans, g;
  ans = f[1].y;
  g = f[1].x;
  for (i = 2; i <= tot; i++) {
    long long mm, k1, p1, k2, p2, kk, c, _;
    k1 = ans;
    p1 = g;
    k2 = f[i].y;
    p2 = f[i].x;
    kk = gcd(p1, p2);
    if (Abs(k2 - k1) % kk) {
      printf("NO\n");
      return 0;
    }
    exgcd(p1 / kk, p2 / kk, mm, _);
    mm %= (p2 / kk);
    c = (((k2 - k1) / kk) % (p2 / kk) + (p2 / kk)) % (p2 / kk);
    mm = ksc(mm, c, (p2 / kk));
    g = p1 / kk * p2;
    ans = ksc(mm, p1, g) + k1;
    ans = (ans % g + g) % g;
  }
  ans %= g;
  if (ans == 0) ans = lcm;
  if (ans + k - 1 > m) {
    printf("NO\n");
    return 0;
  }
  for (i = 0; i < k; i++)
    if (gcd(lcm, i + ans) != a[i + 1]) {
      printf("NO\n");
      return 0;
    }
  printf("YES\n");
}
