package main
import (
"bufio"
"os"
)
func main() {
r := bufio.NewReaderSize(os.Stdin, 64*1024)
w := bufio.NewWriterSize(os.Stdout, 64*1024)
defer w.Flush()
readInt := func() int {
var n int
var c byte
for {
c, _ = r.ReadByte()
if c >= '0' && c <= '9' {
break
}
}
n = int(c - '0')
for {
c, _ = r.ReadByte()
if c >= '0' && c <= '9' {
n = n*10 + int(c-'0')
} else {
break
}
}
return n
}
readChar := func() byte {
var c byte
for {
c, _ = r.ReadByte()
if c == 'A' || c == 'B' {
return c
}
}
}
n := readInt()
q := readInt()
MOD := readInt()
A := make([]int, n+1)
for i := 1; i <= n; i++ {
A[i] = readInt()
}
B := make([]int, n+1)
for i := 1; i <= n; i++ {
B[i] = readInt()
}
D := make([]int, n+1)
for i := 1; i <= n; i++ {
D[i] = (A[i] - B[i]) % MOD
if D[i] < 0 {
D[i] += MOD
}
}
X := make([]int, n+1)
for i := 1; i <= n; i++ {
X[i] = D[i]
if i >= 2 {
X[i] = (X[i] - D[i-1]) % MOD
}
if i >= 3 {
X[i] = (X[i] - D[i-2]) % MOD
}
if X[i] < 0 {
X[i] += MOD
}
}
nonZero := 0
for i := 1; i <= n; i++ {
if X[i] != 0 {
nonZero++
}
}
F := make([]int, n+3)
F[1] = 1
F[2] = 1
for i := 3; i < len(F); i++ {
F[i] = (F[i-1] + F[i-2]) % MOD
}
update := func(idx, val int) {
if idx > n {
return
}
if X[idx] != 0 {
nonZero--
}
X[idx] = (X[idx] + val) % MOD
if X[idx] < 0 {
X[idx] += MOD
}
if X[idx] != 0 {
nonZero++
}
}
for i := 0; i < q; i++ {
c := readChar()
l := readInt()
r_idx := readInt()
if c == 'A' {
update(l, 1)
update(r_idx+1, -F[r_idx-l+2])
update(r_idx+2, -F[r_idx-l+1])
} else {
update(l, -1)
update(r_idx+1, F[r_idx-l+2])
update(r_idx+2, F[r_idx-l+1])
}
if nonZero == 0 {
w.WriteString("YES\n")
} else {
w.WriteString("NO\n")
}
}
}