package main
import (
"bufio"
"fmt"
"os"
)
type Node struct {
side int
pos int
t int
}
func main() {
in := bufio.NewReader(os.Stdin)
var n, k int
if _, err := fmt.Fscan(in, &n, &k); err != nil {
return
}
var sL, sR string
fmt.Fscan(in, &sL)
fmt.Fscan(in, &sR)
walls := [2][]byte{[]byte(sL), []byte(sR)}
visited := [2][]bool{make([]bool, n+5), make([]bool, n+5)}
q := make([]Node, 1, 2*n+10)
q[0] = Node{side: 0, pos: 1, t: 0}
visited[0][1] = true
head := 0
for head < len(q) {
cur := q[head]
head++
if cur.pos <= cur.t {
continue
}
nt := cur.t + 1
// Up
np := cur.pos + 1
if np > n {
fmt.Println("YES")
return
}
if np >= 1 && np <= n && walls[cur.side][np-1] == '-' && !visited[cur.side][np] && np > nt {
visited[cur.side][np] = true
q = append(q, Node{side: cur.side, pos: np, t: nt})
}
// Down
np = cur.pos - 1
if np >= 1 && np <= n && walls[cur.side][np-1] == '-' && !visited[cur.side][np] && np > nt {
visited[cur.side][np] = true
q = append(q, Node{side: cur.side, pos: np, t: nt})
}
// Jump
np = cur.pos + k
ns := 1 - cur.side
if np > n {
fmt.Println("YES")
return
}
if np >= 1 && np <= n && walls[ns][np-1] == '-' && !visited[ns][np] && np > nt {
visited[ns][np] = true
q = append(q, Node{side: ns, pos: np, t: nt})
}
}
fmt.Println("NO")
}