#include <algorithm>
#include <vector>
using namespace std;
#define pb push_back
#define mp make_pair
#define sc second
#define fs first
#define LIM 13
int dx[LIM]={0,1,0,-1, 0,2,0,-2, 0,1,-1, 1,-1};
int dy[LIM]={0,0,1, 0,-1,0,2, 0,-2,1,-1,-1, 1};
vector <pair <int,int> > vx,vy;
int n,m,nrt;
void read ()
{
int i,j,x,y;
scanf ("%d%d",&n,&m);
for (i=1; i<=n; ++i)
{
scanf ("%d%d",&x,&y);
for (j=0; j<LIM; ++j)
if (x+dx[j] || y+dy[j])
{
vx.pb (mp (x+dx[j],y+dy[j]));
vy.pb (mp (y+dy[j],x+dx[j]));
}
}
}
void solve ()
{
vector <pair <int,int> > :: iterator it;
int i,lg,st,dr,x,y;
char tip[2];
sort (vx.begin (),vx.end ());
sort (vy.begin (),vy.end ());
vx.resize (unique (vx.begin (),vx.end ())-vx.begin ());
vy.resize (unique (vy.begin (),vy.end ())-vy.begin ());
x=y=0;
for (i=1; i<=m; ++i)
{
scanf ("%s%d",&tip,&lg);
if (tip[0]=='N')
{
st=lower_bound (vx.begin (),vx.end (),mp (x,y+1))-vx.begin ();
dr=upper_bound (vx.begin (),vx.end (),mp (x,y+lg))-vx.begin ();
if (st<=dr && vx[st].fs==x && y<=vx[st].sc && vx[st].sc<=y+lg)
nrt+=dr-st;
y+=lg;
}
else if (tip[0]=='S')
{
st=lower_bound (vx.begin (),vx.end (),mp (x,y-lg))-vx.begin ();
dr=upper_bound (vx.begin (),vx.end (),mp (x,y-1))-vx.begin ();
if (st<=dr && vx[st].fs==x && y-lg<=vx[st].sc && vx[st].sc<=y)
nrt+=dr-st;
y-=lg;
}
else if (tip[0]=='E')
{
st=lower_bound (vy.begin (),vy.end (),mp (y,x+1))-vy.begin ();
dr=upper_bound (vy.begin (),vy.end (),mp (y,x+lg))-vy.begin ();
if (st<=dr && vy[st].fs==y && x<=vy[st].sc && vy[st].sc<=x+lg)
nrt+=dr-st;
x+=lg;
}
else if (tip[0]=='V')
{
st=lower_bound (vy.begin (),vy.end (),mp (y,x-lg))-vy.begin ();
dr=upper_bound (vy.begin (),vy.end (),mp (y,x-1))-vy.begin ();
if(st<=dr && vy[st].fs==y && x-lg<=vy[st].sc&& vy[st].sc<=x)
nrt+=dr-st;
x-=lg;
}
}
printf ("%d",nrt);
}
int main ()
{
freopen ("zc.in","r",stdin);
freopen ("zc.out","w",stdout);
read ();
solve ();
return 0;
}