#ifdef _MSC_VER
  #ifndef __GNUC__
    #pragma warning(disable: 4996)
  #endif
  #define main main0
#endif
#include <iostream>
using namespace std;
typedef long long           ll;
typedef unsigned long long ull;
typedef unsigned int      uint;

const int Max  = 400000000;
const int Max1 = 50000000;
const char zLewej = 1, zGory = 2, wPrawo = 4, wDol = 8, wejscie = zLewej + zGory,
          wyjscie = wPrawo + wDol, wszystkie = wejscie + wyjscie;

char tab[Max];
char listaChar[Max1];
int  listaInt[Max1];
int  n, m, rozmiar, wskaznik = 0;

bool UaktualnijLewa(int poz);     // zwraca true gdy trzeba zniszczyc warownie
bool UaktualnijGora(int poz);     // zwraca true gdy trzeba zniszczyc warownie
bool UaktualnijPrawa(int poz);    // zwraca true gdy trzeba zniszczyc warownie
bool UaktualnijDol(int poz);      // zwraca true gdy trzeba zniszczyc warownie

void UstawTab() {
//  fill_n(tab, 50, -1);
  fill_n(tab, m + 1, 0);
  fill_n(tab + m + 1, m - 1, wszystkie - zGory);
  for(int i = 3, poz = m + m; i < n; ++i, poz += m) {
    tab[poz] = 0;
    fill_n(tab + poz + 1, m - 1, wszystkie);
  }
  tab[rozmiar-m] = 0;
  fill_n(tab + rozmiar - m + 1, m - 1, wszystkie - wDol);
  fill_n(tab + rozmiar, m, 0);
  for(int i = 1, a = m + 1; i < n; ++i, a += m) {
    tab[a] = wszystkie - zLewej;
    tab[a+m-2] = wszystkie - wPrawo;
  }
  tab[m+1]          = wyjscie;
  tab[m+m-1]        = zLewej + wDol;
  tab[rozmiar-m+1]  = zGory + wPrawo;
  tab[rozmiar-1]    = wejscie;
  return;
}

bool UaktualnijLewa(int poz) {      // zwraca true gdy trzeba zniszczyc warownie
  if(!(tab[poz] & wPrawo)) {        // błąd
    return false;
  }
  listaInt[wskaznik] = poz;
  listaChar[wskaznik] = tab[poz];
  ++wskaznik;
  tab[poz] -= wPrawo;
  if(tab[poz] & wDol)
    return false;
  tab[poz] = 0;
  if(tab[poz-1] & wPrawo)
    if(UaktualnijLewa(poz - 1))
      return true;
  if(tab[poz-m] & wDol)
    if(UaktualnijGora(poz - m))
      return true;
  return false;
}

bool UaktualnijGora(int poz) {      // zwraca true gdy trzeba zniszczyc warownie
  if(!(tab[poz] & wDol)) {          // błąd
    return false;
  }
  listaInt[wskaznik] = poz;
  listaChar[wskaznik] = tab[poz];
  ++wskaznik;
  tab[poz] -= wDol;
  if(tab[poz] & wPrawo)
    return false;
  tab[poz] = 0;
  if(tab[poz-m] & wDol)
    if(UaktualnijGora(poz - m))
      return true;
  if(tab[poz-1] & wPrawo)
    if(UaktualnijLewa(poz - 1))
      return true;
  return false;
}

bool UaktualnijPrawa(int poz) {     // zwraca true gdy trzeba zniszczyc warownie
  if(!(tab[poz] & zLewej)) {        // błąd
    return false;
  }
  listaInt[wskaznik] = poz;
  listaChar[wskaznik] = tab[poz];
  ++wskaznik;
  tab[poz] -= zLewej;
  if(tab[poz] & zGory)
    return false;
  tab[poz] = 0;
  if(tab[poz+m] & zGory)
    if(UaktualnijDol(poz + m))
      return true;
  if(tab[poz+1] & zLewej)
    if(UaktualnijPrawa(poz + 1))
      return true;
  return false;
}

bool UaktualnijDol(int poz) {       // zwraca true gdy trzeba zniszczyc warownie
  if(!(tab[poz] & zGory)) {         // błąd
    return false;
  }
  listaInt[wskaznik] = poz;
  listaChar[wskaznik] = tab[poz];
  ++wskaznik;
  tab[poz] -= zGory;
  if(tab[poz] & zLewej)
    return false;
  tab[poz] = 0;
  if(tab[poz+m] & zGory)
    if(UaktualnijDol(poz + m))
      return true;
  if(tab[poz+1] & zLewej)
    if(UaktualnijPrawa(poz + 1))
      return true;
  return false;
}

void Cofnij() {
  while(--wskaznik >= 0)
    tab[listaInt[wskaznik]] = listaChar[wskaznik];
  return;
}

void Drukuj() {
  for(int i = 0, poz = 0; i <= n; ++i) {
    for(int j = 0; j < m; ++j, ++poz)
      cout << (int)tab[poz] << ' ';
    cout << '\n';
  }
  cout << endl;
}

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  int k, x = 0;
  cin >> n >> m >> k;
  ll nm = ++n * ++m;
  if(nm + m > Max)
    return 0;
  rozmiar = (int)nm;
  UstawTab();
//  Drukuj();
  for(int i = 0; i < k; ++i) {
    bool stan = false;
    int r, c, z, pozycja;
    cin >> r >> c >> z;
    r = (r ^ x) % m;
    c = (c ^ x) % n;
    pozycja = r * n + c + m + 1;
    if(tab[pozycja] == 0)
      continue;
    wskaznik = 0;
    listaInt[0] = pozycja;
    listaChar[0] = tab[pozycja];
    ++wskaznik;
    tab[pozycja] = 0;
    if(tab[pozycja-1] & wPrawo)
      if(UaktualnijLewa(pozycja - 1))
        stan = true;
    if(!stan && (tab[pozycja+1] & zLewej))
      if(UaktualnijPrawa(pozycja + 1))
        stan = true;
    if(!stan && (tab[pozycja-m] & wDol))
      if(UaktualnijGora(pozycja - m))
        stan = true;
    if(!stan & (tab[pozycja+m] & zGory))
      if(UaktualnijDol(pozycja + m))
        stan = true;
    if(!stan) {
      x ^= z;                   // nowa wartownia
      cout << "TAK\n";
    }
    else {
      Cofnij();
      cout << "NIE\n";
    }
  }

  return 0;
}
