output_description: Print the maximum number of desires that can be satisfied at the same time.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N K
      x_1 y_1 c_1
      x_2 y_2 c_2
      :
      x_N y_N c_N
attempt:     n,k=map(int,input().split())
      l=[input().split() for _ in range(n)]
      w=[[0]*(k+1) for _ in range(k+1)]
      b=[[0]*(k+1) for _ in range(k+1)]
      for i in range(n):
          if ((int(l[i][0])//k+int(l[i][1])//k)%2==0)^(l[i][2]=='W'):
              b[int(l[i][0])%k][int(l[i][1])%k]+=1
          else:
              w[int(l[i][0])%k][int(l[i][1])%k]+=1
       
      for i in range(1,k+1):
          b[0][i]+=b[0][i-1]
          b[i][0]+=b[i-1][0]
          w[0][i]+=w[0][i-1]
          w[i][0]+=w[i-1][0]
      for i in range(1,k+1):
          for j in range(1,k+1):
              b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1]
              w[i][j]+=w[i-1][j]+w[i][j-1]-w[i-1][j-1]
       
      ans=0
      for i in range(k+1):
          for j in range(k+1):
              ans=max(ans,b[k][k]-b[i][k]-b[k][j]+2*b[i][j]+w[i][k]+w[k][j]-2*w[i][j])
              ans=max(ans,w[k][k]-w[i][k]-w[k][j]+2*w[i][j]+b[i][k]+b[k][j]-2*b[i][j])
      print(ans)
  
  n,k=map(int,input().split())
  l=[input().split() for _ in range(n)]
  w=[[0]*(k+1) for _ in range(k+1)]
  b=[[0]*(k+1) for _ in range(k+1)]
  for i in range(n):
      if ((int(l[i][0])//k+int(l[i][1])//k)%2==0)^(l[i][2]=='W'):
          b[int(l[i][0])%k][int(l[i][1])%k]+=1
      else:
          w[int(l[i][0])%k][int(l[i][1])%k]+=1
  
  for i in range(1,k+1):
      b[0][i]+=b[0][i-1]
      b[i][0]+=b[i-1][0]
      w[0][i]+=w[0][i-1]
      w[i][0]+=w[i-1][0]
  for i in range(1,k+1):
      for j in range(1,k+1):
          b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1]
          w[i][j]+=w[i-1][j]+w[i][j-1]-w[i-1][j-1]
  
  ans=0
  for i in range(k+1):
      for j in range(k+1):
          ans=max(ans,b[k][k]-b[i][k]-b[k][j]+2*b[i][j]+w[i][k]+w[k][j]-2*w[i][j])
          ans=max(ans,w[k][k]-w[i][k]-w[k][j]+2*w[i][j]+b[i][k]+b[k][j]-2*b[i][j])
  print(ans)
  
  Submission
  問題 	D - Checker
  ユーザ名 	lpo
  投稿日時 	2019/10/11 18:33:24
  言語 	PyPy3 (2.4.0)
  状態    n,k=map(int,input().split())
      l=[input().split() for _ in range(n)]
      w=[[0]*(k+1) for _ in range(k+1)]
      b=[[0]*(k+1) for _ in range(k+1)]
      for i in range(n):
          if ((int(l[i][0])//k+int(l[i][1])//k)%2==0)^(l[i][2]=='W'):
              b[int(l[i][0])%k][int(l[i][1])%k]+=1
          else:
              w[int(l[i][0])%k][int(l[i][1])%k]+=1
       
      for i in range(1,k+1):
          b[0][i]+=b[0][i-1]
          b[i][0]+=b[i-1][0]
          w[0][i]+=w[0][i-1]
          w[i][0]+=w[i-1][0]
      for i in range(1,k+1):
          for j in range(1,k+1):
              b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1]
              w[i][j]+=w[i-1][j]+w[i][j-1]-w[i-1][j-1]
       
      ans=0
      for i in range(k+1):
          for j in range(k+1):
              ans=max(ans,b[k][k]-b[i][k]-b[k][j]+2*b[i][j]+w[i][k]+w[k][j]-2*w[i][j])
              ans=max(ans,w[k][k]-w[i][k]-w[k][j]+2*w[i][j]+b[i][k]+b[k][j]-2*b[i][j])
      print(ans)
  
  n,k=map(int,input().split())
  l=[input().split() for _ in range(n)]
  w=[[0]*(k+1) for _ in range(k+1)]
  b=[[0]*(k+1) for _ in range(k+1)]
  for i in range(n):
      if ((int(l[i][0])//k+int(l[i][1])//k)%2==0)^(l[i][2]=='W'):
          b[int(l[i][0])%k][int(l[i][1])%k]+=1
      else:
          w[int(l[i][0])%k][int(l[i][1])%k]+=1
  
  for i in range(1,k+1):
      b[0][i]+=b[0][i-1]
      b[i][0]+=b[i-1][0]
      w[0][i]+=w[0][i-1]
      w[i][0]+=w[i-1][0]
  for i in range(1,k+1):
      for j in range(1,k+1):
          b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1]
          w[i][j]+=w[i-1][j]+w[i][j-1]-w[i-1][j-1]
  
  ans=0
  for i in range(k+1):
      for j in range(k+1):
          ans=max(ans,b[k][k]-b[i][k]-b[k][j]+2*b[i][j]+w[i][k]+w[k][j]-2*w[i][j])
          ans=max(ans,w[k][k]-w[i][k]-w[k][j]+2*w[i][j]+b[i][k]+b[k][j]-2*b[i][j])
  print(ans)
problem_description: Statement
  
  AtCoDeer is thinking of painting an infinite two-dimensional grid in a
  _checked pattern of side K_. Here, a checked pattern of side K is a pattern
  where each square is painted black or white so that each connected component
  of each color is a K × K square. Below is an example of a checked pattern of
  side 3:
  
  ![cba927b2484fad94fb5ff7473e9aadef.png](https://img.atcoder.jp/arc089/cba927b2484fad94fb5ff7473e9aadef.png)
  
  AtCoDeer has N desires. The i-th desire is represented by x_i, y_i and c_i. If
  c_i is `B`, it means that he wants to paint the square (x_i,y_i) black; if c_i
  is `W`, he wants to paint the square (x_i,y_i) white. At most how many desires
  can he satisfy at the same time?
samples: [{"input": "4 3\n    0 1 W\n    1 2 W\n    5 3 B\n    5 4 B", "output": "4\n    \n\nHe can satisfy all his desires by painting as shown in the example above.\n\n* * *"}, {"input": "2 1000\n    0 0 B\n    0 1 W", "output": "2\n    \n\n* * *"}, {"input": "6 2\n    1 2 B\n    2 1 W\n    2 2 B\n    1 0 B\n    0 6 W\n    4 5 W", "output": "4"}]