#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("zc.in"); ofstream g("zc.out");
int dx[13]={0,-2,-1,-1,-1,0,0,0,0,1,1,1,2};
int dy[13]={0,0,-1,0,1,-2,-1,1,2,-1,0,1,0};
struct cell {int x,y;};
int N,M,i,j,x,y,k,nrcel,t1,t2,res;
char c;
pair < int, int > vx[1400000],vy[1400000];
inline int search(pair < int, int > v[], int x, int y)
{ int st=1,dr=nrcel;
pair < int, int > t;
t.first=x, t.second=y;
if(v[nrcel]<=t) return nrcel+1;
while(st<dr)
{ int mid=(st+dr)/2;
if(v[mid]<=t) st=mid+1; else dr=mid;
}
return st;
}
int main()
{ f>>N>>M;
/*
for(i=1; i<=N; ++i)
{ f>>x>>y;
for(t1=-2; t1<=2; ++t1)
for(t2=-2; t2<=2; ++t2)
if(abs(t1)+abs(t2)<=2 && (x+t1!=0 || y+t2!=0))
++nrcel, vx[nrcel].first=x+t1, vx[nrcel].second=y+t2;
}
*/
for(i=1; i<=N; ++i)
{ f>>x>>y;
for(int xx,yy,j=0; j<13; ++j)
{ xx=x+dx[j]; yy=y+dy[j];
if(xx || yy)
++nrcel, vx[nrcel].first=xx, vx[nrcel].second=yy;
}
/*
for(t1=-2; t1<=2; ++t1)
for(t2=-2; t2<=2; ++t2)
if(abs(t1)+abs(t2)<=2 && (x+t1!=0 || y+t2!=0))
++nrcel, vx[nrcel].first=x+t1, vx[nrcel].second=y+t2;
*/
}
vx[0].first=vx[1].first-1;
sort(vx+1,vx+nrcel+1);
for(i=1; i<=nrcel; ++i)
if(vx[i].first!=vx[i-1].first || vx[i].second!=vx[i-1].second) vx[++k]=vx[i];
nrcel=k;
for(i=1; i<=nrcel; ++i) vy[i].first=vx[i].second, vy[i].second=vx[i].first;
sort(vy+1, vy+nrcel+1);
x=y=0;
for(i=1; i<=M; ++i)
{ f>>c>>k;
switch(c)
{ case 'N': {t1=search(vx,x,y); y+=k; t2=search(vx,x,y);} break;
case 'S': {t2=search(vx,x,y-1); y-=k; t1=search(vx,x,y-1);} break;
case 'V': {t2=search(vy,y,x-1); x-=k; t1=search(vy,y,x-1);} break;
case 'E': {t1=search(vy,y,x); x+=k; t2=search(vy,y,x);} break;
}
res += t2 - t1;
}
g<<res<<'\n'; g.close(); return 0;
}