#include <bits/stdc++.h>
#include <boost/range/irange.hpp>
#include <boost/range/adaptors.hpp>

using namespace std;
using namespace boost::range;
using namespace boost::adaptors;

using ll = long long;

int main() {
    ll n, k;
    cin >> n >> k;
    vector<ll> xs(n, 0);
    vector<ll> ys(n, 0);
    for (auto &&i: boost::irange(0LL, n)) {
        ll x, y;
        char c;
        cin >> x >> y >> c;
        if (c == 'W') x += k;
        y = y % (2 * k);
        if (y >= k) {
            x += k;
            y -= k;
        }
        x = x % (2 * k);
        xs.at(i) = x;
        ys.at(i) = y;
    }
//    for (auto &&i: boost::irange(0LL, n)) {
//        cout << "i: " << i << " x: " << xs.at(i) << " y: " << ys.at(i) << endl;
//    }
    vector<vector<ll>> map(2 * k, vector<ll>(k, 0));
    for (auto &&i: boost::irange(0LL, n)) {
        ll x{xs.at(i)}, y{ys.at(i)};
//        vector<vector<ll>> map(2*k, vector<ll>(k, 0));
        if (x == 0) {
            if (y == 0) {
                map.at(0).at(0)++;
                map.at(k).at(0)--;
            } else {
                map.at(0).at(y)++;
                map.at(k).at(y)--;
                map.at(k).at(0)++;
                map.at(k).at(y)--;
            }
        } else if (x < k) {
            if (y == 0) {
                map.at(x).at(0)++;
                map.at(x + k).at(0)--;
            } else {
                map.at(0).at(0)++;
                map.at(x).at(0)--;
                map.at(0).at(y)--;
                map.at(x).at(y)++;
                map.at(x).at(y)++;
                map.at(x + k).at(y)--;
                map.at(x + k).at(0)++;
                map.at(x + k).at(y)--;
            }
        } else if (x == k) {
            if (y == 0) {
                map.at(k).at(0)++;
            } else {
                map.at(0).at(0)++;
                map.at(0).at(y)--;
                map.at(k).at(0)--;
                map.at(k).at(y)++;
                map.at(k).at(y)++;
            }
        } else {
            if (y == 0) {
                map.at(0).at(0)++;
                map.at(x - k).at(0)--;
                map.at(x).at(0)++;
            } else {
                map.at(0).at(y)++;
                map.at(x - k).at(y)--;
                map.at(x - k).at(0)++;
                map.at(x - k).at(y)--;
                map.at(x).at(0)--;
                map.at(x).at(y)++;
                map.at(x).at(y)++;
            }
        }
//        cout << "raw map: "<< endl;
//        for (auto &&y: boost::irange(0LL, k)) {
//            for (auto &&x: boost::irange(0LL, 2 * k)) {
//                printf("%2lld", map.at(x).at(y));
//            }
//            cout << endl;
//        }
//        for (auto &&x: boost::irange(0LL, 2*k)){
//            for (auto &&y: boost::irange(0LL, k)){
//                if (y!=0){
//                    map.at(x).at(y) += map.at(x).at(y-1);
//                }
//            }
//        }
//        for (auto &&y: boost::irange(0LL, k)){
//            for (auto &&x: boost::irange(0LL, 2*k)){
//                if (x != 0){
//                    map.at(x).at(y) += map.at(x-1).at(y);
//                }
//            }
//        }
//        cout << "accum:" << endl;
//        for (auto &&y: boost::irange(0LL, k)) {
//            for (auto &&x: boost::irange(0LL, 2 * k)) {
//                printf("%2lld", map.at(x).at(y));
//            }
//            cout << endl;
//        }
//        cout << endl;
    }

//    for (auto &&y: boost::irange(0LL, k)) {
//        for (auto &&x: boost::irange(0LL, 2 * k)) {
//
//            printf("%2lld", map.at(x).at(y));
//        }
//        cout << endl;
//    }

    for (auto &&y: boost::irange(0LL, k)) {
        for (auto &&x: boost::irange(0LL, 2 * k)) {
            if (x == 0)continue;
            else {
                map.at(x).at(y) += map.at(x - 1).at(y);
            }
        }
    }
    for (auto &&x: boost::irange(0LL, 2 * k)) {
        for (auto &&y: boost::irange(0LL, k)) {
            if (y == 0) continue;
            else {
                map.at(x).at(y) += map.at(x).at(y - 1);
            }
        }
    }
    ll maximum{0};
    for (auto &&x: boost::irange(0LL, 2 * k)) {
        for (auto &&y: boost::irange(0LL, k)) {
            maximum = max(maximum, map.at(x).at(y));
        }
    }
    cout << maximum << endl;
}

Measured memory_bytes: 17536