#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
#define PII pair<int,int>
#define mp make_pair
#define pb push_back
vector<PII> v,u;
int N , M , n , X , Y , sol;
void read();
int abs(int k)
{
if(k < 0)return -k;
return k;
}
int up(PII k, vector<PII> v);
int down(PII k, vector<PII> v);
void solve();
void write();
int main()
{
read();
solve();
write();
return 0;
}
void read()
{
int x , y;
freopen("zc.in" , "r" , stdin );
scanf("%d%d" , &N , &M );
for(int i = 1 ; i <= N ; ++i )
{
scanf("%d%d\n" , &x , &y );
for(int k = -2 ; k <= 2 ; ++k )
for(int p = -2 ; p <= 2 ; ++p )
if(abs(k)+abs(p) <= 2)
{
v.pb(mp(x+k,y+p));
u.pb(mp(y+p,x+k));
}
}
}
void solve()
{
char c;
int d;
sort(v.begin(),v.end());
sort(u.begin(),u.end());
n = 0;
for(int i = 1 ; i < (int)v.size() ; ++i )
if(v[i] != v[i-1])
v[++n] = v[i];
v.resize(n+1);
n = 0;
for(int i = 1 ; i < (int)u.size() ; ++i )
if(u[i] != u[i-1])
u[++n] = u[i];
u.resize(n+1);
for(int i = 1 ; i <= M ; ++i )
{
scanf("%c%d\n" , &c , &d );
if(c == 'N')
{
sol+=up(mp(X,Y+d),v)-down(mp(X,Y+1),v)-1;
Y+=d;
}
if(c == 'S')
{
sol+=up(mp(X,Y-1),v)-down(mp(X,Y-d),v)-1;
Y-=d;
}
if(c == 'E')
{
sol+=up(mp(Y,X+d),u)-down(mp(Y,X+1),u)-1;
X+=d;
}
if(c =='V')
{
sol+=up(mp(Y,X-1),u)-down(mp(Y,X-d),u)-1;
X-=d;
}
}
}
int up(PII k , vector<PII> a)
{
if(k >= a[n])return n+1;
if(k < a[0])return 0;
int st = -1 , dr = n+1 , m;
while(st < dr && st+dr >= 0)
{
m = (st+dr)/2;
if(a[m] <= k)st = m+1;
else dr = m;
}
return dr;
}
int down( PII k , vector<PII> a)
{
if(k > a[n])return n;
if(k <= a[0])return -1;
int st = -1 , dr = n+1 , m;
while(st < dr)
{
m = (st+dr+1)/2;
if(a[m] >= k)dr = m-1;
else st = m;
}
return st;
}
void write()
{
freopen("zc.out" , "w" , stdout );
/* for(vector<PII>::iterator it = v.begin() ; it < v.end() ; it++ )
{
PII k = *it;
printf("%d %d\n" , k.first , k.second);
}
printf("%d" , up(mp(5,6),v) - down(mp(5,6),v));*/
printf("%d" , sol);
}