class Robot
  attr_accessor :position
  def initialize(position)
    @position = position
  end
  def move(dir, length)
    if dir == "N"
      @position[:y] += length
    elsif dir == "E"
      @position[:x] += length
    elsif dir == "S"
      @position[:y] -= length
    elsif dir == "W"
      @position[:x] -= length
    end
    return @position
  end
end
def delete_cross_gem(start_pos, end_pos, gems)
  if start_pos[:x] == end_pos[:x]
    gem_on_x = gems.select{|item| item[:x] == start_pos[:x]}
    min = start_pos[:y] < end_pos[:y] ? start_pos[:y] : end_pos[:y]
    max = start_pos[:y] >= end_pos[:y] ? start_pos[:y] : end_pos[:y]
    delete_gems = gem_on_x.select{|item| (item[:y] <= max && item[:y] >= min)}
  else
    gem_on_y = gems.select{|item| item[:y] == start_pos[:y]}
    min = start_pos[:x] < end_pos[:x] ? start_pos[:x] : end_pos[:x]
    max = start_pos[:x] >= end_pos[:x] ? start_pos[:x] : end_pos[:x]
    delete_gems = gem_on_y.select{|item| (item[:x] <= max && item[:x] >= min)}
  end
  delete_gems.each do |g|
    gems.delete(g)
  end
end

loop do
  gems = []
  gem_size = gets.chomp.to_i
  if gem_size == 0
    break
  end
  gem_size.times do
    g = {}
    g[:x], g[:y] = gets.chomp.split(" ").map{|item| item.to_i}
    gems.push(g)
  end
  robot = Robot.new({x: 10,y: 10})
  op_size = gets.chomp.to_i
  op_size.times do
    op_dir, op_length_str = gets.chomp.split(" ")
    op_length = op_length_str.to_i
    current_pos = robot.position.dup
    delete_cross_gem(current_pos, robot.move(op_dir, op_length), gems)
  end
  if gems.empty?
    puts "Yes"
  else
    puts "No"
  end
end
