#include <bits/stdc++.h>
using namespace std;
void fre() {
  freopen("c://test//input.in", "r", stdin);
  freopen("c://test//output.out", "w", stdout);
}
template <class T1, class T2>
inline void gmax(T1 &a, T2 b) {
  if (b > a) a = b;
}
template <class T1, class T2>
inline void gmin(T1 &a, T2 b) {
  if (b < a) a = b;
}
const int N = 1e5 + 10, M = 0, Z = 1e9 + 7, ms63 = 0x3f3f3f3f;
int n, k;
char s[12];
int coe[N];
bool check(int val) {
  long long tmp = 0;
  int mod = abs(val - k);
  for (int i = n; i >= 0; --i) {
    tmp = (tmp * val + coe[i]) % mod;
  }
  return tmp;
}
bool solve() {
  int qmark = 0;
  for (int i = 0; i <= n; ++i) {
    scanf("%s", s);
    if (s[0] == '?')
      coe[i] = 1e9, ++qmark;
    else
      sscanf(s, "%d", &coe[i]);
  }
  if (k == 0) {
    if (coe[0] == 0) return 1;
    if (coe[0] != 1e9) return 0;
    bool IplayFirst = (n + 1 - qmark & 1);
    return IplayFirst;
  }
  if (qmark) {
    bool IplayLast = (n % 2 == 1);
    return IplayLast;
  } else {
    for (int tim = 1; tim <= 50; ++tim) {
      if (check(rand() % 10000 * rand())) return 0;
    }
    return 1;
  }
}
int main() {
  while (~scanf("%d%d", &n, &k)) {
    puts(solve() ? "Yes" : "No");
  }
  return 0;
}
