package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func evalZero(a []int64, k int64) bool {
n := len(a) - 1
if k == 0 {
return a[0] == 0
}
if k == 1 {
var s int64
for i := 0; i <= n; i++ {
s += a[i]
}
return s == 0
}
if k == -1 {
var s int64
for i := 0; i <= n; i++ {
if i%2 == 0 {
s += a[i]
} else {
s -= a[i]
}
}
return s == 0
}
var c int64
for i := 0; i <= n; i++ {
t := c + a[i]
if t%k != 0 {
return false
}
c = t / k
}
return c == 0
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n int
var k int64
fmt.Fscan(in, &n, &k)
a := make([]int64, n+1)
known := make([]bool, n+1)
unknown := 0
for i := 0; i <= n; i++ {
var s string
fmt.Fscan(in, &s)
if s == "?" {
unknown++
} else {
v, _ := strconv.ParseInt(s, 10, 64)
a[i] = v
known[i] = true
}
}
if unknown == 0 {
if evalZero(a, k) {
fmt.Fprintln(out, "Yes")
} else {
fmt.Fprintln(out, "No")
}
return
}
if k == 0 {
if known[0] {
if a[0] == 0 {
fmt.Fprintln(out, "Yes")
} else {
fmt.Fprintln(out, "No")
}
} else {
made := n + 1 - unknown
if made%2 == 1 {
fmt.Fprintln(out, "Yes")
} else {
fmt.Fprintln(out, "No")
}
}
return
}
if n%2 == 1 {
fmt.Fprintln(out, "Yes")
} else {
fmt.Fprintln(out, "No")
}
}