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
#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std;
const int N = 100005;
int n, z, dsize, usize;
int down[N], up[N], dodatnie[N], ujemne[N];
bool cmpd(int a, int b)
{
  return down[a] < down[b];
}
bool cmpu(int a, int b)
{
  return up[a] > up[b];
}

bool symulacja(LL zycie)
{
  for(int i=1; i<=dsize; i++)
  {
    int D = down[dodatnie[i]];
    int U = up[dodatnie[i]];
    if(D >= zycie)
      return 0;
    zycie += U - D;
  }
  for(int i=1; i<=usize; i++)
  {
    int D = down[ujemne[i]];
    int U = up[ujemne[i]];
    if(D >= zycie)
      return 0;
    zycie += U - D;
  }
  return zycie > 0;
}
int main()
{
  scanf("%d%d", &n, &z);
  for(int i=1; i<=n; i++)
  {
    scanf("%d%d", &down[i], &up[i]);
    if(up[i] >= down[i])
      dodatnie[++dsize] = i;
    else
      ujemne[++usize] = i;
  }
  sort(dodatnie+1, dodatnie+1+dsize, cmpd);
  sort(ujemne+1, ujemne+1+usize, cmpu);
  if(!symulacja(z))
    printf("NIE");
  else
  {
    printf("TAK\n");
    for(int i=1; i<=dsize; i++)
      printf("%d ", dodatnie[i]);
    for(int i=1; i<=usize; i++)
      printf("%d ", ujemne[i]);
  }
  return 0;
}