#include <bits/stdc++.h>
using namespace std;

int ad[200069],st[200059],pos[200069][2],cnt,w,h,n,da[200069][4],ans[200069],cnt1,cnt2,st1[200069],st2[200069],pos1,pos2;
string s;
typedef pair<int,int> ii;
typedef pair<ii,ii> iii;
typedef pair<int,ii> iiii;
iiii fin[200069];
iii d[200069];
#define S first.first
#define T first.second
#define ID second.second
#define X second.first

void solve(){
    cnt1=cnt2=0;
    for (int i=1;i<=cnt;i++){
         if (da[st[i]][2]) st1[++cnt1]=st[i],pos[i][0]=cnt1,pos[i][1]=cnt2;
         else st2[++cnt2]=st[i],pos[i][0]=cnt1,pos[i][1]=cnt2;
         //cout<<st[i]<<" ";
    }
   // cout<<endl;
    for (int i=1;i<=cnt;i++){
            pos1=pos[i][0];
            pos2=pos[i][1];
        if (da[st[i]][2]==0){
            if (pos1>cnt2-pos2) {
                ans[st[i]]=st1[pos1-(cnt2-pos2)];
            }
            else if (pos1<=cnt2-pos2){
                ans[st[i]]=st2[pos1+pos2];
            }
        }
        else {
            if (pos1-1>=cnt2-pos2) {
                ans[st[i]]=st1[pos1-(cnt2-pos2)];
            }
            else if (pos1-1<cnt2-pos2){
                ans[st[i]]=st2[pos2+pos1];
            }
        }
           // cout<<pos1<<" "<<pos2<<" "<<da[st[i]][2]<<"---"<<st[i]<<" "<<ans[st[i]]<<endl;
    }
}
int main(){
    scanf("%d%d%d",&w,&h,&n);
    for (int i=1;i<=n;i++){
        scanf("%d%d",&da[i][0],&da[i][1]);
        cin>>s;
        if (s=="E") da[i][2]=1;
        else da[i][2]=0;
        if ((da[i][0]+da[i][1])%2==1){
            if (da[i][2]) da[i][0]++;
            else da[i][1]++;
            ad[i]=-1;
        //    cout<<i<<" ";
        }
    }
    //cout<<da
    for (int i=1;i<=n;i++) ans[i]=i;
    for (int i=1;i<=n;i++){
        if (ad[i]!=-1){
            d[i].S=da[i][0]+da[i][1];
            d[i].X=da[i][0];
            d[i].ID=i;
            d[i].T=da[i][0]%2;
        }
    }
    sort(d+1,d+1+n);
    cnt=0;
    for (int i=1;i<=n;i++){
        if (d[i].S!=d[i+1].S || d[i].T!=d[i+1].T) {
            st[++cnt]=d[i].ID;
            if (da[st[1]][0]+da[st[1]][1]!=0 && d[i].S!=0){
                solve();
            }
            cnt=0;
        }
        else {
            st[++cnt]=d[i].ID;
        }
    }
    for (int i=1;i<=n;i++)
        if (ad[i]==-1 && da[i][0]<=w && da[i][1]<=h){
            d[i].S=da[i][0]+da[i][1];
            d[i].X=da[i][0];
            d[i].ID=i;
            d[i].T=da[i][0]%2;
        }
        else {d[i].S=0;}
    cnt=0;
    sort(d+1,d+1+n);
    for (int i=1;i<=n;i++){
        if (d[i].S!=d[i+1].S || d[i].T!=d[i+1].T) {
            st[++cnt]=d[i].ID;
            if (da[st[1]][0]+da[st[1]][1]!=0 && d[i].S!=0) {
                for (int j=1;j<=cnt-1;j++){
                    if (da[st[j]][0]==da[st[j+1]][0]){
                        da[st[j]][2]=1-da[st[j]][2];
                        da[st[j+1]][2]=1-da[st[j+1]][2];
                        if (da[st[j]][2]>da[st[j+1]][2]) swap(st[j],st[j+1]);
                    }
                }
                solve();
                for (int j=1;j<=cnt-1;j++){
                   /* if (da[st[j]][0]==da[st[j+1]][0]){
                        swap(ans[st[j]],ans[st[j+1]]);
                    }*/
                }
            }
            cnt=0;
        }
        else if (d[i].S==d[i+1].S) {
            st[++cnt]=d[i].ID;
        }
    }
    //cout<<endl;
    for (int i=1;i<=n;i++){
        if (da[ans[i]][2]==0){
            fin[i].first=h-da[ans[i]][1]-ad[i];
            fin[i].second.second=ans[i];
            fin[i].second.first=i;
        }
        else {
            fin[i].first=w-da[ans[i]][0]-ad[i];
            fin[i].second.second=ans[i];
            fin[i].second.first=i;
        }
    }
    sort(fin+1,fin+1+n);
    for (int i=1;i<=n;i++) cout<<fin[i].second.first<<endl;
}
/*5
11
14
19
6
8
13
17
20
4
15
2
3
7
12
18
9
1
10
16*/



Measured memory_bytes: 15688