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
#include<cstdio>
#include<algorithm>
#include<list>

using namespace std;

const int MAX=50000;
int h[MAX],x[MAX],po[MAX];

bool k(const int& a,const int& b)
{
	return x[a]<x[b];
}

int main()
{
	int t,n,w;
	int x1,x2,y1,y2;
	list<int> przed;
	list<int>::iterator iter;
	scanf("%d",&t);
	for(int i=0;i<t;++i)
	{
		przed.clear();
		scanf("%d %d",&n,&w);
		for(int j=0;j<n;++j)
		{
			scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
			x[j]=x1;
			h[j]=y2-y1;
			//przed[j]=j;
			przed.push_back(j);
		}
		przed.sort(k);
		//sort(przed,przed+n,k);
		for(int j=0;j<n;++j)
		{
			scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
			x[j]=x1;
			po[j]=j;
		}
		sort(po,po+n,k);
		for(int j=0;j<n;++j)
		{
			for(iter=przed.begin();iter!=przed.end();++iter)
			{
				if(*iter==po[j])
				{
					przed.erase(iter);
					break;
				}
				if(h[*iter]+h[po[j]]>w)
				{
					printf("NIE\n");
					goto koniec;
				}
			}
		}
		printf("TAK\n");
		koniec:;
	}
	
	return 0;
}