1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <cstdio>
#include <algorithm>

using namespace std;

int n, z;

struct Map {
    int d;
    int a;
    int index;
};

Map map[100001];

bool by_more_health(Map map1, Map map2) {
    int d1 = map1.a - map1.d;
    int d2 = map2.a - map2.d;
    return (d1 >= 0 || d2 >= 0) ? d1 >= d2 : d1 < d2;
}

int main() {
    scanf("%d %d", &n, &z);

    for (int i=0; i<n; i++) {
        scanf("%d %d", &map[i].d, &map[i].a);
        map[i].index = i + 1;
    }

    sort(map, map + n, by_more_health);

    for (int i=0; i<n; i++) {
        z -= map[i].d;
        if (z <= 0) {
            printf("NIE\n");
            return 0;
        }
        z += map[i].a;
    }

    printf("TAK\n");
    for (int i=0; i<n; i++) {
        printf("%d ", map[i].index);
    }

    return 0;
}