#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
struct punct{
int x,y;
};
int cmp1(punct a,punct b){
return a.x<b.x;
}
int cmp2(punct a,punct b){
return a.y<b.y;
}
int upbX(punct v[],int l,int x){
int st=1,dr=l,mid,pos=0;
while(st<=dr){
mid=(st+dr)/2;
if(v[mid].x<=x){
st=mid+1;
pos=mid;
}else{
dr=mid-1;
}
}
return pos;
}
int upbY(punct v[],int l,int x){
int st=1,dr=l,mid,pos=0;
while(st<=dr){
mid=(st+dr)/2;
if(v[mid].y<=x){
st=mid+1;
pos=mid;
}else{
dr=mid-1;
}
}
return pos;
}
int lwbX(punct v[],int l,int x){
int st=1,dr=l,mid,pos=0;
while(st<=dr){
mid=(st+dr)/2;
if(v[mid].x>=x){
dr=mid-1;
pos=mid;
}else{
st=mid+1;
}
}
return pos;
}
int lwbY(punct v[],int l,int x){
int st=1,dr=l,mid,pos=0;
while(st<=dr){
mid=(st+dr)/2;
if(v[mid].y>=x){
dr=mid-1;
pos=mid;
}else{
st=mid+1;
}
}
return pos;
}
punct vx[1300001],vy[1300001];
int c,m,i,j,k,cx,cy,cnt,dist,aux1,aux2,rez;
char dir;
int main(){
ifstream fin("zc.in");
ofstream fout("zc.out");
fin>>c>>m;
for(i=1;i<=c;i++){
fin>>cx>>cy;
for(j=-2;j<=2;j++){
for(k=-2;k<=2;k++){
if(abs(j)+abs(k)<=2){
vx[++cnt]={cx+j,cy+k};
vy[cnt]={cx+j,cy+k};
}
}
}
}
sort(vx+1,vx+cnt+1,cmp1);
sort(vy+1,vy+cnt+1,cmp2);
int crtx=0,crty=0;
for(j=1;j<=m;j++){
fin>>dir>>dist;
if(dir=='N'){
aux1=lwbY(vy,cnt,crty+1); crty+=dist;
aux2=upbY(vy,cnt,crty);
if(aux2!=0&&aux1!=0){
for(i=aux1;i<=aux2;i++){
if(vy[i].x==crtx){
rez++;
}
}
}
}
if(dir=='S'){
aux1=upbY(vy,cnt,crty-1); crty-=dist;
aux2=lwbY(vy,cnt,crty);
if(aux2!=0&&aux1!=0){
for(i=aux1;i>=aux2;i--){
if(vy[i].x==crtx){
rez++;
}
}
}
}
if(dir=='V'){
aux1=upbX(vx,cnt,crtx-1); crtx-=dist;
aux2=lwbX(vx,cnt,crtx);
if(aux2!=0&&aux1!=0){
for(i=aux1;i>=aux2;i--){
if(vx[i].y==crty){
rez++;
}
}
}
}
if(dir=='E'){
aux1=lwbY(vx,cnt,crtx+1); crtx+=dist;
aux2=upbY(vx,cnt,crtx);
if(aux2!=0&&aux1!=0){
for(i=aux1;i<=aux2;i++){
if(vx[i].y==crty){
rez++;
}
}
}
}
}
fout<<rez;
fin.close();
fout.close();
return 0;
}