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>

struct potwor {
	int d,a,nr;
};

inline bool operator<(const potwor &a, const potwor &b)
{
	int da=a.a-a.d,db=b.a-b.d;
	if ((da >= 0) != (db >= 0))
		return (da >= 0) > (db >= 0);
	if (da >= 0)
		return a.d < b.d;
	// da < 0 <=> db < 0
	if (a.d == b.d)
		return a.a > b.a;
	return a.d > b.d;
}

int main()
{
	int n;
	long long z;
	scanf("%d %lld", &n, &z);
	potwor tab[n];
	for (int i=0 ;i<n; ++i) {
		scanf("%d %d", &tab[i].d, &tab[i].a);
		tab[i].nr = i + 1;
	}
	std::sort(tab, tab+n);
	for (int i=0; i<n && z>=0; ++i) {
//		fprintf(stderr, "%d %d\n", tab[i].d, tab[i].a);
		z -= tab[i].d;
		if (0 < z)
			z += tab[i].a;
	}
	if (z <=0)
		printf("NIE\n");
	else {
		printf("TAK\n");
		for (int i=0; i<n; ++i)
			printf("%d ", tab[i].nr);
		printf("\n");
	}
	return 0;
}