import Control.Monad
import Data.List
import System.IO.Unsafe

type Pos  = (Int, Int)
type Move = (Dir, Int)
type Dir  = String

main = liftM read getLine >>= loop
  where
    loop 0 = return ()
    loop nGem = do
      gems <- getGemPos nGem

      moves <- liftM read getLine >>= getMove

      -- print gems
      -- print moves

      let (newPos, newGot) =
            foldl (\(curPos, curGot) -> \move -> processMove curPos curGot move gems)
                  ((10, 10), replicate (length gems) False)
                  moves

      -- print (newPos, newGot)

      putStrLn $ if all id newGot then "Yes" else "No"

      liftM read getLine >>= loop

movePos :: Move -> Pos -> Pos
movePos ("N", n) (x, y) = (x, y+n)
movePos ("S", n) (x, y) = (x, y-n)
movePos ("W", n) (x, y) = (x-n, y)
movePos ("E", n) (x, y) = (x+n, y)

processMove :: Pos -> [Bool] -> Move -> [Pos] -> (Pos, [Bool])
processMove pos got move gems =
  aux (snd move) pos got (fst move, 1) gems
  where aux 0 pos got _ _ = (pos, got)
        aux n pos got move gems =
          let (newPos, newGot) = processMove1 pos got move gems
          in aux (n-1) newPos newGot move gems

processMove1 :: Pos -> [Bool] -> Move -> [Pos] -> (Pos, [Bool])
processMove1 pos got move gems =
  let newPos = movePos move pos
      index = elemIndex newPos gems
      newGot = maybe got (\i -> (take i got) ++ [True] ++ (drop (i+1) got)) index
  in
     (newPos, newGot)

readPos :: String -> Pos
readPos s = let [x, y] = map read $ words s in (x, y)

readMove :: String -> Move
readMove s = let [d, n] = words s in (d, read n :: Int)

getGemPos :: Int -> IO [Pos]
getGemPos n = replicateM n (liftM readPos getLine)

getMove :: Int -> IO [Move]
getMove n = replicateM n (liftM readMove getLine)