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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#define s(x); scanf("%d",&x);
using namespace std;
int a,hp;
priority_queue<pair<int,pair<int,int> > > good,wrong;
bool zapadka = false;
vector <int> v;

void read(int k){
	int a,b,c;
	s(a); s(b); c = b-a;
	if(c <= 0) wrong.push(make_pair(b,make_pair(-a,k)));
	else good.push(make_pair(-a,make_pair(c,k)));
	return;
}


void solve(){
	while(!good.empty()){
		if(hp+good.top().first>0){
			v.push_back(good.top().second.second);
			hp=hp+good.top().second.first;
			good.pop();
		}
		else{zapadka = true; return;}
	}
	while(!wrong.empty()){
		if(hp+wrong.top().second.first>0){
			v.push_back(wrong.top().second.second);
			hp=hp+wrong.top().second.first+wrong.top().first;
			wrong.pop();
		}
		else{; zapadka = true; return;}
	}
	return;
}


int main(){
	s(a); s(hp);
	for(int i = 0; i < a; i++)
		read(i+1);
	solve();
	if(zapadka) printf("NIE\n");
	else{
		printf("TAK\n");
		for(int i = 0; i < v.size(); i++)
			printf("%d ",v[i]);
		printf("\n");
	}
	return 0;
}














//~~~~~~KONSPEKT~~~~~~//
/*
 * wczytaj dane
 * wrzuc na kolejke priorytetowa po obrazeniach i po leczeniu
 * kolejka dla korzystnych i niekorzystnych
 * wyrzucaj z kolejek az sie skoncza, lub gdy nie mozna
 * jak nie mozna to dupa
 * jak monza to fajnie
 */