OI XVI - lyz

// https://szkopul.edu.pl/problemset/problem/kadKFW3YScAMW8o20u0BctQh/site/?key=statement
// XVI Łyżwy

#include <bits/stdc++.h>

// using namespace std;

#define int long long

constexpr int sizik = 200 * 1001;

#define ar std::array
#define pr std::pair
#define vec std::vector

typedef vec<vec<int>> _kra;

int n, m, k, d;

struct A {
    int sum, psom, pref, suff;
    A(int sum1 = 0, int p1 = 0, int pref1 = 0, int suff1 = 0) : sum(sum1), psom(p1), pref(pref1), suff(suff1) {};
};

A drz[3 * sizik];

void merge_drz(A& node, A const& left, A const& right) {
    node.sum = left.sum + right.sum;
    node.psom = std::max({left.psom, right.psom, left.suff + right.pref});
    node.pref = std::max(left.pref, left.sum + right.pref);
    node.suff = std::max(right.suff, right.sum + left.suff);
}

void add_to_node(A& node, int delta) {
    node.pref += delta;
    node.sum += delta;
    node.psom += delta;
    node.suff += delta;
}

void build(int v, int tl, int tr, int arr_size) {
    if (tl == tr) {
        if (tl <= arr_size) add_to_node(drz[v], -k);
    } else {
        int tm = (tl + tr) / 2;

        build(2 * v, tl, tm, arr_size);
        build(2 * v + 1, tm + 1, tr, arr_size);

        merge_drz(drz[v], drz[2 * v], drz[2 * v + 1]);
    }
}

void update(int v, int tl, int tr, int a, int delta) {
    if (tl == tr) {
        add_to_node(drz[v], delta);
    } else {
        int tm = (tl + tr) / 2;

        if (a <= tm) {
            update(v * 2, tl, tm, a, delta);
        } else {
            update(v * 2 + 1, tm + 1, tr, a, delta);
        }

        merge_drz(drz[v], drz[2 * v], drz[2 * v + 1]);
    }
}

int get_ans() {
    return drz[1].psom;
}

int get_next_pow_2(int v) {
    v--;
    v |= v >> 1;
    v |= v >> 2;
    v |= v >> 4;
    v |= v >> 8;
    v |= v >> 16;
    v |= v >> 32;
    v++;
    return v;
}

bool check() {
    int ans = get_ans();

    bool isGood = ans <= (k * d);
    return isGood;
}

void solve() {
    std::cin >> n >> m >> k >> d;

    int drz_size = get_next_pow_2(n - d);

    build(1, 1, drz_size, n - d);

    for (int i = 1; i <= m; i++) {
        int r, x;
        std::cin >> r >> x;

        update(1, 1, drz_size, r, x);

        // check
        if (check()) {
            std::cout << "TAK\n";
        } else {
            std::cout << "NIE\n";
        }
    }
}

int32_t main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}