← Home
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")
		}
	}
}