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
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
#include<cstdio>
#include<vector>
#include<algorithm>
#include<set>
#include<iostream>
#include<tuple>

using namespace std;

#define rep(i,n) for(int i=0; i<(int)n; i++)
#define st first
#define nd second
#define mp make_pair
#define pb push_back

typedef vector<int> vi;
typedef pair<int,int> pi;
typedef vector<pi> vpii;
typedef set<int> SI;
typedef long long LL;


#ifdef DEBUG
const bool debug = true;
#else
const bool debug = false;
#endif
LL n,m,k,l,z,sumR;
const int inf = 1000 * 1000 * 1000 ;
const int MAKSN = 1000 * 1000 + 13; // UZUPElnic

vector<tuple<LL, LL ,int> > v;
vector<tuple<LL,LL,int> > rest;
vector<int> ans;

bool poss = true;

void readIn()
{
	cin>>n>>z;

	sumR = 0;

	rep(i,n)
	{
		cin>>k>>l;

		if(l >= k)
		{
			v.pb(make_tuple(k,l,i+1));
		}
		else
		{
			rest.pb(make_tuple(l,k,i+1));
		}
	}
}

void solve()
{
	sort(v.begin(),v.end());
	sort(rest.begin(),rest.end());

	reverse(rest.begin(),rest.end());

	rep(i,v.size())
	{
		if(z > get<0> (v[i]))
		{
			z += (get<1>(v[i]) - get<0>(v[i]));
			ans.pb(get<2>(v[i]));
		}
		else poss = false;
	}

	rep(i,rest.size())
	{
		if(z > get<1> (rest[i]))
		{
			z += (get<0>(rest[i]) - get<1>(rest[i]));
			ans.pb(get<2>(rest[i]));
		}
		else
		{
			poss = false;
		}
	}

	if(poss)
	{
		cout<<"TAK\n";
		rep(i,ans.size())
		{
			cout<<ans[i]<<" ";
		}

		cout<<"\n";
	}
	else cout<<"NIE\n";
}

int main()
{
	ios_base::sync_with_stdio(0);
	readIn();
	solve();
	return 0;
}