package main
import (
"bufio"
"fmt"
"os"
)
func canReach(px, py, dx, dy, a, b int) bool {
if dx == 0 && dy == 0 {
return px == a && py == b
}
if dx == 0 {
if px != a {
return false
}
d := b - py
if d%dy != 0 {
return false
}
return d/dy >= 0
}
if dy == 0 {
if py != b {
return false
}
d := a - px
if d%dx != 0 {
return false
}
return d/dx >= 0
}
dxNeed := a - px
dyNeed := b - py
if dxNeed%dx != 0 || dyNeed%dy != 0 {
return false
}
kx := dxNeed / dx
ky := dyNeed / dy
return kx == ky && kx >= 0
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var n, a, b int
var s string
fmt.Fscan(in, &n, &a, &b)
fmt.Fscan(in, &s)
dx, dy := 0, 0
for _, c := range s {
switch c {
case 'N':
dy++
case 'E':
dx++
case 'S':
dy--
case 'W':
dx--
}
}
ok := canReach(0, 0, dx, dy, a, b)
px, py := 0, 0
for _, c := range s {
switch c {
case 'N':
py++
case 'E':
px++
case 'S':
py--
case 'W':
px--
}
if canReach(px, py, dx, dy, a, b) {
ok = true
}
}
if ok {
fmt.Fprintln(out, "YES")
} else {
fmt.Fprintln(out, "NO")
}
}
}