#include <bits/stdc++.h>
const int MAX_LEN = 1010;
using namespace std;
template <typename U, typename V>
string to_string(pair<U, V>);
string to_string(const string& e_) { return "\"" + e_ + "\""; }
string to_string(char e_) { return "\'" + string(1, e_) + "\'"; }
string to_string(bool e_) { return e_ ? "true" : "false"; }
template <typename T>
string to_string(T e_) {
  string s_ = "[ ";
  for (const auto& x_ : e_) s_ += to_string(x_) + " ";
  return s_ + "]";
}
template <typename U, typename V>
string to_string(pair<U, V> e_) {
  return "(" + to_string(e_.first) + ", " + to_string(e_.second) + ")";
}
void dbg_str() { ; }
template <typename U, typename... V>
void dbg_str(U u, V... v) {
  ;
  dbg_str(v...);
}
const long long int llmax = 1e18;
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
pair<long long int, long long int> getFraction(long long int a[],
                                               long long int size) {
  long long int n = 1;
  long long int d = a[size - 1];
  for (long long int i = size - 2; i >= 0; i--) {
    if (a[i] > llmax / d) return pair<long long int, long long int>(-1, -1);
    long long int nextd = d * a[i] + n;
    n = d;
    d = nextd;
  }
  return pair<long long int, long long int>(d, n);
}
long long int p, q;
int n;
long long int a[100];
int main() {
  scanf("%lld %lld", &p, &q);
  long long int g = gcd(p, q);
  p /= g;
  q /= g;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%lld", &a[i]);
  pair<long long int, long long int> ans = getFraction(a, n);
  ;
  if (ans.first == p && ans.second == q)
    printf("YES\n");
  else
    printf("NO\n");
}
