#include<bits/stdc++.h>
using namespace std;
using Int = long long;
//INSERT ABOVE HERE
signed main(){
  Int n,h;
  cin>>n>>h;
  vector<Int> a(n),b(n),c(n),d(n);
  for(Int i=0;i<n;i++) cin>>a[i]>>b[i]>>c[i]>>d[i];
  
  auto idx=
    [&](Int k,Int s){
      if(s==0){
	if(c[k]==0) return 300+a[k];
	return c[k];
      }else{
	if(d[k]==0) return b[k];
	return 300+d[k];
      }
    };
  vector<vector<queue<Int> > > cnt(2,vector<queue<Int> >(600));
  for(Int i=0;i<n;i++){
    cnt[0][idx(i,0)].emplace(i);
    cnt[1][idx(i,1)].emplace(i);
  }
  
  auto NO=[](){cout<<"NO"<<endl;exit(0);};
  vector<Int> used(n),ok(600,0);
  vector<queue<Int> > q(600);
  vector<vector<Int> > lp;
  for(Int i=0;i<n;i++){
    if(used[i]) continue;
    used[i]=1;
    Int l=idx(i,0),r=idx(i,1);
    vector<Int> v;        
    while(1){
      v.emplace_back(l);
      v.emplace_back(r);
      Int flg=0;
      while(!cnt[1][l].empty()){
	Int k=cnt[1][l].front();cnt[1][l].pop();
	if(used[k]) continue;
	used[k]=1;
	assert(idx(k,1)==l);
	l=idx(k,0);
	flg=1;
	break;
      }
      if(flg) continue;
      while(!cnt[0][r].empty()){
	Int k=cnt[0][r].front();cnt[0][r].pop();
	if(used[k]) continue;
	used[k]=1;
	assert(idx(k,0)==r);
	r=idx(k,1);
	flg=1;
	break;
      }
      if(flg) continue;
      break;
    }
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());    
    if(l==r){
      for(Int x:v) q[x].emplace(lp.size());
      lp.emplace_back(v);
      continue;
    }
    if(l<300||r>=300) NO();
    for(Int x:v) ok[x]=1;
  }
  vector<Int> ch(lp.size(),0),us(600,0);  
  queue<Int> q2;
  for(Int i=0;i<600;i++)
    if(ok[i]) q2.emplace(i);
  
  while(!q2.empty()){
    Int v=q2.front();q2.pop();
    if(us[v]) continue;
    us[v]=1;
    while(!q[v].empty()){
      Int u=q[v].front();q[v].pop();
      if(ch[u]) continue;
      ch[u]=1;
      for(Int w:lp[u]) q2.emplace(w);
    }
  }
  
  for(Int i=0;i<(Int)lp.size();i++) if(!ch[i]) NO();
  cout<<"YES"<<endl;
  return 0;
}
