#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <functional>
#include <set>
#include <queue>
#include <cctype>
#include <climits>
#include <stack>
#include <map>
#include <cstring>
#include <cassert>
 
using namespace std;

// (y,x) ~ (y+ky-1,x+kx-1) に +1 する累積和
// [0,cell.size()) x [0,cell.size()) で考える
void add(vector<vector<int> > &cell, int y, int x, int ky, int kx){

    // printf("y=%d,x=%d,ky=%d,kx=%d\n",y,x,ky,kx);

    if(y<0){
    //    cout<<"caled 1"<<endl;
        int d=-y;
        add(cell,0,            x,ky-d,kx);
        add(cell,cell.size()-d,x,d,   kx);
        return;
    }

    if(y>=cell.size()){
    //    cout<<"caled 2"<<endl;

        int d=y-cell.size()+1;
        add(cell,0,            x,ky-d,kx);
        add(cell,cell.size()-d,x,d,   kx);
        return;
    }

    if(y+ky>cell.size()){
    //    cout<<"caled 3"<<endl;
        int d=y+ky-cell.size();
    //    cout<<"d="<<d<<" ky="<<ky<<endl;
        add(cell,y,x,ky-d,kx);
        add(cell,0,x,d,kx);
        return;
    }

    if(x<0){
    //    cout<<"caled 4"<<endl;
        int d=-x;
        add(cell,y,0,            ky,kx-d);
        add(cell,y,cell.size()-d,ky,d);
        return;
    }

    if(x>=cell.size()){
    //   cout<<"caled 5"<<endl;
        int d=x-cell.size()+1;
        add(cell,y,0,            ky,kx-d);
        add(cell,y,cell.size()-d,ky,d);
        return;
    }

    if(x+kx>cell.size()){
    //    cout<<"caled 6"<<endl;
        int d=x+kx-cell.size();
        add(cell,y,x,ky,kx-d);
        add(cell,y,0,ky,d);
        return;
    }

    //cout<<y<<" "<<x<<" "<<ky<<" "<<kx<<endl;
    cell[y][x]++;
    if(x+kx<cell.size()) cell[y][x+kx]--;
    if(y+ky<cell.size()) cell[y+ky][x]--;
    if(x+kx<cell.size() && y+ky<cell.size()) cell[y+ky][x+kx]++;

}

void show(vector<vector<int> > &cell){
    vector<vector<int> > tmp=cell;
    for(int i=0;i<tmp.size();i++){
        for(int j=0;j<tmp.size()-1;j++){
            tmp[i][j+1]+=tmp[i][j];
        }
    }

    for(int i=0;i<tmp.size()-1;i++){
        for(int j=0;j<tmp.size();j++){
            tmp[i+1][j]+=tmp[i][j];
        }
    }  

    for(int i=0;i<tmp.size();i++){
        for(int j=0;j<tmp.size();j++){
            cout<<tmp[i][j];
        }
        cout<<endl;
    }
}

int main(){

    int n,k;
    cin>>n>>k;

    vector<vector<int> > cell(2*k,vector<int>(2*k,0));

    while(n--){
        int x,y;
        string c;
        cin>>x>>y>>c;

        if(c=="W") y+=k;

        x%=(2*k);
        y%=(2*k);

        //cout<<"1st"<<endl;
        add(cell,y-k+1,x-k+1,k,k);
        //show(cell);
        //cell=vector<vector<int> >(2*k,vector<int>(2*k,0));

        //cout<<"2nd"<<endl;
        add(cell,(y+1)%(2*k),(x+1)%(2*k),k,k);
        //show(cell);
        //cell=vector<vector<int> >(2*k,vector<int>(2*k,0));
    }

    //show(cell);

    for(int i=0;i<2*k;i++){
        for(int j=0;j<2*k-1;j++){
            cell[i][j+1]+=cell[i][j];
        }
    }

    for(int i=0;i<2*k-1;i++){
        for(int j=0;j<2*k;j++){
            cell[i+1][j]+=cell[i][j];
        }
    }

    int res=0;
    for(int i=0;i<2*k;i++){
        for(int j=0;j<2*k;j++){
            res=max(res,cell[i][j]);
            //cout<<cell[i][j];
        }
        //cout<<endl;
    }
    cout<<res<<endl;


	return 0;
}


Measured memory_bytes: 16128