#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmin(T& x, const T& y) {
  if (y < x) {
    x = y;
    return true;
  }
  return false;
}
template <class T>
bool chmax(T& x, const T& y) {
  if (x < y) {
    x = y;
    return true;
  }
  return false;
}
template <class T>
long long abs(T x) {
  return x < 0 ? x - 0.5 : x + 0.5;
}
const long double EPS = 1e-9;
const int INF = (int)1e9 + 5;
const long long LINF = (long long)1e18 + 5;
ostream& operator<<(ostream& os, const string& s) { return os << s.c_str(); }
template <class P, class Q>
ostream& operator<<(ostream& os, const pair<P, Q>& p) {
  os << "(" << p.first << ", " << p.second << ")";
  return os;
}
template <class T, template <class, class...> class Cont, class... Args>
ostream& operator<<(ostream& os, const Cont<T, Args...>& v) {
  bool was = false;
  os << "{";
  for (auto x : v) {
    if (was) {
      os << ", ";
    }
    was = true;
    os << x;
  }
  os << "}";
  return os;
}
const int N = 100500;
int n, k;
string s[N];
int strToInt(const string& s) {
  int x;
  sscanf(s.c_str(), "%d", &x);
  return x;
}
void bad() {
  cout << "No" << endl;
  exit(0);
}
void good() {
  cout << "Yes" << endl;
  exit(0);
}
bool checkModulo(vector<long long> a, long long p) {
  for (long long& x : a) {
    x %= p;
    if (x < 0) x += p;
  }
  reverse(a.begin(), a.end());
  for (int i = 0; i + 1 < (int)a.size(); i++) {
    a[i + 1] -= (a[i] * k) % p;
    a[i + 1] %= p;
    if (a[i + 1] < 0) a[i + 1] += p;
  }
  cerr << "p = " << p << endl;
  return a.back() == 0;
}
int main() {
  cin >> n >> k;
  k = -k;
  int cnt = 0;
  for (int i = 0; i <= n; i++) {
    cin >> s[i];
    if (s[i] == "?") cnt++;
  }
  if (cnt == 0) {
    vector<long long> a(n + 1);
    for (int i = 0; i <= n; i++) {
      a[i] = strToInt(s[i]);
    }
    if (!checkModulo(a, (int)1e9 + 7)) bad();
    if (!checkModulo(a, (int)1e9 + 9)) bad();
    if (!checkModulo(a, (int)1e9 + 13)) bad();
    if (!checkModulo(a, (int)1e9 + 17)) bad();
    if (!checkModulo(a, (int)1e9 + 1)) bad();
    if (!checkModulo(a, (int)1e9 + 2)) bad();
    if (!checkModulo(a, (int)1e9 + 3)) bad();
    if (!checkModulo(a, (int)1e9 + 4)) bad();
    if (!checkModulo(a, (int)1.33e9 + 9)) bad();
    if (!checkModulo(a, (int)1.34e9 + 7)) bad();
    if (!checkModulo(a, (int)1.35e9 + 99)) bad();
    if (!checkModulo(a, (int)1.44e9 + 17)) bad();
    if (!checkModulo(a, (int)1.66e9 + 1)) bad();
    if (!checkModulo(a, (int)1.85e9 + 2)) bad();
    if (!checkModulo(a, (int)1.01e9 + 3)) bad();
    if (!checkModulo(a, (int)1.61e9 + 4)) bad();
    good();
  }
  int was = (n + 1) - cnt;
  if (k == 0) {
    if ((was + 1) % 2 == 0) {
      if (s[0] == "?") {
        good();
      } else {
        if (strToInt(s[0]) == 0) {
          good();
        } else {
          bad();
        }
      }
    } else {
      if (s[0] == "?" || strToInt(s[0]) != 0) {
        bad();
      } else {
        good();
      }
    }
  }
  if ((n + 1) % 2 == 0)
    good();
  else
    bad();
  return 0;
}
