# pragma GCC optimize("O3")
# include <bits/stdc++.h>
std::pair<int,int> DR[] = {{-1,0},{0,1},{1,0},{0,-1},{-1,1},{-1,-1},{1,1},{1,-1}};
# define maxn 100005
# define ll long long
# define clock (clock() * 1000.0 / CLOCKS_PER_SEC)
# define rc(s) return cout << s,0
# define _ ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
# define db(x) cerr << #x << " = " << x << '\n'
# define pb push_back
# define mp make_pair
# define sz(x) (int)((x).size())
//# define int ll
using namespace std;

int n,k,x,y,c;
vector<pair<int,int>>vec[2];
int sum[1 << 10][1 << 10];

void f(int a,int c,int b,int d)
{
	if(a > c) return ;
	if(b > d) return ;
	sum[a][b]++;
	sum[a][d + 1]--;
	sum[c + 1][b]--;
	sum[c + 1][d + 1]++;
}

int32_t main(){_
    //freopen("input","r",stdin);
	cin >> n >> k;
	for(int i = 1;i <= n;i++)
	{
		char F;
		cin >> x >> y >> F;
		if(F == 'W') c = 0;
		else c = 1;
		vec[!c].pb(mp(x,y));
		int a = x / k;
		int b = y / k;
		if(c == 0)
		{
			if(a % 2 == b % 2)
			{
				f(0,k - 1 - (x % k),0,k - 1 - (y % k));
				f((k - (x % k)),k - 1,k - (y % k),k - 1);
			}
			else
			{
				f(0,k - 1 - (x % k),k - (y % k),k - 1);
				f((k - (x % k)),k - 1,0,k - 1 - (y % k));
			}
		}
		else
		{
			if(a % 2 == b % 2)
			{
				f(0,k - 1 - (x % k),k - (y % k),k - 1);
				f((k - (x % k)),k - 1,0,k - 1 - (y % k));
			}
			else
			{
				f(0,k - 1 - (x % k),0,k - 1 - (y % k));
				f((k - (x % k)),k - 1,k - (y % k),k - 1);
			}
		}
	}
	int ans = 0;
	for(int i = 0;i < k;i++)
	{
		for(int j = 0;j < k;j++)
		{
			if(i) sum[i][j] += sum[i - 1][j];
			if(j) sum[i][j] += sum[i][j - 1];
			if(i && j) sum[i][j] -= sum[i - 1][j - 1];
			ans = max(ans,sum[i][j]);
		}
	}
	for(int i = 0;i < k;i++) for(int j = 0;j < k;j++) sum[i][j] = 0;
	c = 0;
	for(auto it : vec[c])
	{
		int x = it.first;
		int y = it.second;
		int a = x / k;
		int b = y / k;
		if(c == 0)
		{
			if(a % 2 == b % 2)
			{
				f(0,k - 1 - (x % k),0,k - 1 - (y % k));
				f((k - (x % k)),k - 1,k - (y % k),k - 1);
			}
			else
			{
				f(0,k - 1 - (x % k),k - (y % k),k - 1);
				f((k - (x % k)),k - 1,0,k - 1 - (y % k));
			}
		}
		else
		{
			if(a % 2 == b % 2)
			{
				f(0,k - 1 - (x % k),k - (y % k),k - 1);
				f((k - (x % k)),k - 1,0,k - 1 - (y % k));
			}
			else
			{
				f(0,k - 1 - (x % k),0,k - 1 - (y % k));
				f((k - (x % k)),k - 1,k - (y % k),k - 1);
			}
		}
	}
	c = 1;
	for(auto it : vec[c])
	{
		int x = it.first;
		int y = it.second;
		int a = x / k;
		int b = y / k;
		if(c == 0)
		{
			if(a % 2 == b % 2)
			{
				f(0,k - 1 - (x % k),0,k - 1 - (y % k));
				f((k - (x % k)),k - 1,k - (y % k),k - 1);
			}
			else
			{
				f(0,k - 1 - (x % k),k - (y % k),k - 1);
				f((k - (x % k)),k - 1,0,k - 1 - (y % k));
			}
		}
		else
		{
			if(a % 2 == b % 2)
			{
				f(0,k - 1 - (x % k),k - (y % k),k - 1);
				f((k - (x % k)),k - 1,0,k - 1 - (y % k));
			}
			else
			{
				f(0,k - 1 - (x % k),0,k - 1 - (y % k));
				f((k - (x % k)),k - 1,k - (y % k),k - 1);
			}
		}
	}
	for(int i = 0;i < k;i++)
	{
		for(int j = 0;j < k;j++)
		{
			if(i) sum[i][j] += sum[i - 1][j];
			if(j) sum[i][j] += sum[i][j - 1];
			if(i && j) sum[i][j] -= sum[i - 1][j - 1];
			ans = max(ans,sum[i][j]);
		}
	}
	for(int i = 0;i < k;i++) for(int j = 0;j < k;j++) sum[i][j] = 0;
	rc(ans);
}


Measured memory_bytes: 5372