#include <bits/stdc++.h>
using namespace std;
long long gcd(long long n1, long long n2) {
  if (n1 % n2 == 0) return n2;
  return gcd(n2, n1 % n2);
}
long long powmod(long long base, long long exponent) {
  long long ans = 1;
  while (exponent) {
    if (exponent & 1) ans = (ans * base) % 1000000007;
    base = (base * base) % 1000000007;
    exponent /= 2;
  }
  return ans;
}
long long arr[1000100 + 1];
int n, k;
bool check(long long md) {
  long long ret = 0;
  long long temp = 1;
  for (int i = 0; i <= n; i++) {
    long long temp1 = (temp * arr[i]) % md;
    ret += temp1;
    temp = (temp * k) % md;
  }
  ret = ((ret % md) + md) % md;
  return (ret == 0);
}
string str[1000100 + 1];
int main() {
  int i, j, cnt = 0;
  string answer = "";
  scanf("%d", &n);
  scanf("%d", &k);
  for (i = 0; i <= n; i++) {
    cin >> str[i];
    if (str[i] == "?") cnt++;
  }
  if (k) {
    if (cnt) {
      if (n & 1)
        answer = "Yes";
      else
        answer = "No";
    } else {
      for (i = 0; i <= n; i++) {
        int no = 0;
        if (str[i][0] == '-') {
          for (j = 1; j < str[i].size(); j++) {
            int temp3 = str[i][j] - '0';
            no = 10 * no + temp3;
          }
          no *= -1;
        } else {
          for (j = 0; j < str[i].size(); j++) {
            int temp3 = str[i][j] - '0';
            no = 10 * no + temp3;
          }
        }
        arr[i] = no;
      }
      bool f = true;
      for (long long i1 = (1LL << 40); i1 < ((1LL << 40) + 2); i1++)
        f &= check(i1);
      if (f)
        answer = "Yes";
      else
        answer = "No";
    }
  } else {
    if (str[0] == "0")
      answer = "Yes";
    else if (str[0] == "?") {
      if (n % 2 == cnt % 2)
        answer = "Yes";
      else
        answer = "No";
    } else
      answer = "No";
  }
  cout << answer;
  return 0;
}
