#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <string>
#include <map>
#include <set>
#include <stack>
#include <tuple>
#include <deque>
#include <numeric>
#include <bitset>
#include <iomanip>
#include <cassert>
#include <chrono>
#include <random>
#include <limits>
#include <iterator>
#include <functional>
#include <sstream>
#include <complex>
using namespace std;

typedef long long ll;
typedef uint64_t ull;
typedef pair<int, int> P;
typedef pair<int, double> Pid;
typedef pair<double, int> Pdi;
typedef pair<ll, int> Pl;
typedef pair<ll, ll> Pll;
typedef pair<int, pair<int, int>> PP;
typedef pair<P, int> PPi;
constexpr double PI = 3.1415926535897932;   // acos(-1)
constexpr double EPS = 1e-9;
constexpr int INF = 1001001001;
constexpr int mod = 1000000007;
// constexpr int mod = 998244353;

#define chmax(x, y) x = max(x, y)
#define chmin(x, y) x = min(x, y)
#define chadd(x, y) x = (x + y) % mod

template<class T>
struct CumulativeSum2D{
    vector<vector<T>> data;

    CumulativeSum2D(int W, int H) : data(W + 1, vector<int>(H + 1, 0)) {}

    void add(int x, int y, T z){
        ++x, ++y;
        if(x >= data.size() || y >= data[0].size()) return;
        data[x][y] += z;
    }

    void build(){
        for(int i = 1; i < data.size(); ++i){
            for(int j = 1; j < data[i].size(); ++j){
                data[i][j] += data[i][j - 1] + data[i - 1][j] - data[i - 1][j - 1];
            }
        }
    }

    T query(int sx, int sy, int gx, int gy){
        return (data[gx][gy] - data[sx][gy] - data[gx][sy] + data[sx][sy]);
    }
};

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, k;
    cin >> n >> k;
    vector<int> x(n), y(n);
    int sz = k * 2;
    CumulativeSum2D<int> sum(sz, sz);
    for(int i = 0; i < n; ++i){
        char c;
        cin >> x[i] >> y[i] >> c;
        if(c == 'W')    y[i] += k;
        x[i] %= sz;
        y[i] %= sz;
        sum.add(x[i], y[i], 1);
    }
    sum.build();
    int ans = 0;
    for(int i = 0; i <= k; ++i){
        for(int j = 0; j <= k; ++j){
            int foo = sum.query(i, j, i + k, j + k);
            foo += sum.query(max(0, i - k), max(0, j - k), i, j);
            foo += sum.query(i + k, max(0, j - k), min(sz, i + sz), j);
            foo += sum.query(max(0, i - k), j + k, i, min(sz, j + sz));
            foo += sum.query(i + k, j + k, min(sz, i + sz), min(sz, j + sz));
            chmax(ans, foo);
        }
    }
    for(int i = 0; i <= k; ++i){
        for(int j = k; j < sz; ++j){
            int foo = sum.query(i, j, i + k, min(sz, j + k));
            foo += sum.query(max(0, i - k), j - k, i, j);
            foo += sum.query(i + k, j - k, min(sz, i + sz), j);
            foo += sum.query(i, max(0, j - sz), i, j + k);
            chmax(ans, foo);
        }
    }
    for(int i = k; i < sz; ++i){
        for(int j = 0; j <= k; ++j){
            int foo = sum.query(i, j, min(sz, i + k), j + k);
            foo += sum.query(i - k, max(0, j - k), i, j);
            foo += sum.query(i - k, j + k, i, min(sz, j + sz));
            foo += sum.query(max(0, i - sz), j, i - k, j + k);
            chmax(ans, foo);
        }
    }
    for(int i = k; i < sz; ++i){
        for(int j = k; j < sz; ++j){
            int foo = sum.query(i, j, sz, sz);
            foo += sum.query(i, 0, sz, j - k);
            foo += sum.query(i - k, j - k, i, j);
            foo += sum.query(0, 0, i - k, j - k);
            foo += sum.query(0, j, i - k, sz);
            chmax(ans, foo);
        }
    }
    cout << ans << endl;
}

Measured memory_bytes: 16768