#include <bits/stdc++.h>
using namespace std;
inline long long getint() {
  long long _x = 0, _tmp = 1;
  char _tc = getchar();
  while ((_tc < '0' || _tc > '9') && _tc != '-') _tc = getchar();
  if (_tc == '-') _tc = getchar(), _tmp = -1;
  while (_tc >= '0' && _tc <= '9') _x *= 10, _x += (_tc - '0'), _tc = getchar();
  return _x * _tmp;
}
inline long long add(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x + _y;
  if (_ >= _mod) _ -= _mod;
  return _;
}
inline long long sub(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x - _y;
  if (_ < 0) _ += _mod;
  return _;
}
inline long long mul(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x * _y;
  if (_ >= _mod) _ %= _mod;
  return _;
}
long long mypow(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 1ll;
  long long _tmp = mypow(_a, _x / 2, _mod);
  _tmp = mul(_tmp, _tmp, _mod);
  if (_x & 1) _tmp = mul(_tmp, _a, _mod);
  return _tmp;
}
long long mymul(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 0ll;
  long long _tmp = mymul(_a, _x / 2, _mod);
  _tmp = add(_tmp, _tmp, _mod);
  if (_x & 1) _tmp = add(_tmp, _a, _mod);
  return _tmp;
}
inline bool equal(double _x, double _y) {
  return _x > _y - 1e-9 && _x < _y + 1e-9;
}
int __ = 1, _cs;
long long n, k, cntq;
char c[100];
bool q[101010];
long long vl[101010];
void build() {}
void init() {
  n = getint();
  k = getint();
  for (int i = 0; i <= n; i++) {
    scanf("%s", c);
    if (c[0] == '?') {
      q[i] = true;
      cntq++;
    } else
      sscanf(c, "%lld", &vl[i]);
  }
}
inline bool win() {
  if (k == 0) return vl[0] == 0;
  if (k == 1) {
    long long res = 0;
    for (int i = 0; i <= n; i++) res += vl[i];
    return res == 0;
  }
  if (k == -1) {
    long long res = 0;
    for (int i = 0; i <= n; i++)
      if (i & 1)
        res -= vl[i];
      else
        res += vl[i];
    return res == 0;
  }
  long long res = 0;
  for (int i = n; i >= 0; i--) {
    res = res * k + vl[i];
    if (abs(res) > 1000000000000ll) return false;
  }
  return res == 0;
}
void solve() {
  if (cntq) {
    if (k == 0) {
      if (!q[0])
        puts(vl[0] ? "No" : "Yes");
      else
        puts((n + 1 - cntq) % 2 ? "Yes" : "No");
    } else
      puts(n % 2 ? "Yes" : "No");
  } else {
    puts(win() ? "Yes" : "No");
  }
}
int main() {
  build();
  while (__--) {
    init();
    solve();
  }
}
