OIG XV - cze

// tresc: https://szkopul.edu.pl/problemset/problem/fRRpEz8PbuHalZh4lgF29mXy/site/?key=statement
// OIG XV (etap 2, sesja próbna)

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <vector>

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

    long long A, B, C, D;
    std::cin >> A >> B >> C >> D;

    long long iloczyn = C * D;

    if (A * B < iloczyn) {
        std::cout << "NIE";
        return 0;
    }

    if (iloczyn < A && iloczyn < B) {
        std::cout << "NIE";
        return 0;
    }

    std::vector<long long> w1;
    std::vector<long long> w2;

    for (long long i = 1; i * i <= C; i++) {
        if (C % i == 0) {
            w1.push_back(i);
            w1.push_back(C / i);
        }
    }

    for (long long i = 1; i * i <= D; i++) {
        if (D % i == 0) {
            w2.push_back(i);
            w2.push_back(D / i);
        }
    }

    for (int i = 0; i < w1.size(); i++) {
        for (int j = 0; j < w2.size(); j++) {
            long long d1 = w1[i] * w2[j], d2 = (iloczyn / w1[i]) / w2[j];

            if (d1 <= A && d2 <= B) {
                std::cout << "TAK";
                return 0;
            }

            if (d1 <= B && d2 <= A) {
                std::cout << "TAK";
                return 0;
            }
        }
    }

    std::cout << "NIE";

    return 0;
}