%CA凉
代码风格药丸
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=50005;
int n,m;
int tree[N],pos[N];
inline int read()
{
int a=0,f=1; char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}
while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}
return a*f;
}
struct Car
{
int x1,y1,x2,y2,w,id;
Car () {};
Car (int _,int __,int ___,int ____,int _____,int ______)
{
x1=_; y1=__; x2=___; y2=____; w=_____; id=______;
}
}first[N],second[N];
inline bool operator<(Car a,Car b)
{
return a.x1==b.x1?a.x2<b.x2:a.x1<b.x1;
}
inline int lowbit(int i)
{
return (i&(-i));
}
inline void add(int x,int val)
{
for (int i=x;i<=n;i+=lowbit(i)) tree[i]=max(tree[i],val);
}
inline int query(int x)
{
int tmp=0;
for (int i=x;i;i-=lowbit(i)) tmp=max(tmp,tree[i]);
return tmp;
}
int main()
{
int testcase=read();
while (testcase--)
{
memset(tree,0,sizeof(tree));
n=read(); m=read();
for (int i=1;i<=n;i++)
{
int x1=read(),y1=read(),x2=read(),y2=read();
if (x1>x2) swap(x1,x2);
if (y1>y2) swap(y1,y2);
first[i]=Car(x1,y1,x2,y2,y2-y1,i);
}
for (int i=1;i<=n;i++)
{
int x1=read(),y1=read(),x2=read(),y2=read();
if (x1>x2) swap(x1,x2);
if (y1>y2) swap(y1,y2);
second[i]=Car(x1,y1,x2,y2,y2-y1,i);
}
sort(first+1,first+n+1);
sort(second+1,second+n+1);
for (int i=1;i<=n;i++) pos[first[i].id]=i;
bool flag=true;
for (int i=n;i;i--)
{
if (query(pos[second[i].id])+second[i].w>m) flag=false;
if (!flag) break;
add(pos[second[i].id],second[i].w);
}
puts(flag?"TAK":"NIE");
}
return 0;
}