#include <iostream>
#include <vector>
#include <array>
#include <algorithm>
#include <limits>
#include <cmath>
#include <numeric>
#include <string>
using namespace std;
using ll = long long int;
using ull = unsigned long long int;
#define rep(i, a, b) for(int i = (a); i < (b); ++i )
#define rrep(i, a, b) for(int i = (a); i > (b); --i )
#define REP(i, a, b) for(int i = (a); i <= (b); ++i )
#define RREP(i, a, b) for(int i = (a); i >= (b); --i )
#define llrep(i, a, b) for(ll i = (a); i < (b); ++i )
#define llrrep(i, a, b) for(ll i = (a); i > (b); --i )
#define llREP(i, a, b) for(ll i = (a); i <= (b); ++i )
#define llRREP(i, a, b) for(ll i = (a); i >= (b); --i )
#define ullrep(i, a, b) for(ull i = (a); i < (b); ++i )
#define ullrrep(i, a, b) for(ull i = (a); i > (b); --i )
#define ullREP(i, a, b) for(ull i = (a); i <= (b); ++i )
#define ullRREP(i, a, b) for(ull i = (a); i >= (b); --i )
int N, K;
int X[100010];
int Y[100010];
int C[100010];
int KK[1000*1000];
int main() {
cin >> N >> K;
rep(i, 0, N) {
char c;
cin >> X[i] >> Y[i] >> c;
if(c == 'B') {
C[i] = 1;
}else{
C[i] = 0;
}
}
int firstTgt = C[0];
int t = 0;
rep(xshift, 0, K)
rep(yshift, 0, K) {
int cnt = 1;
int neg = 0;
for (int i=1; i < N; i++) {
int xn = (X[i]-X[0] + xshift) / K % 2;
int yn = (Y[i]-Y[0] + yshift) / K % 2;
if (xn == yn) {
if (C[i] == firstTgt) {
cnt++;
}else{
neg++;
}
}else{
if (C[i] != firstTgt) {
cnt++;
}else{
neg++;
}
}
}
// cout << cnt << ", " << neg << endl;
KK[t++] = max(cnt, neg);
}
cout << *max_element(KK, KK+t) << endl;
}