#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<unordered_map>
#include<unordered_set>
#define lol(i,n) for(ll i=0;i<n;i++)
#define mod 1000000007
typedef long long ll;

using namespace std;
int NOEL(){
  cout<<"NO"<<endl;
  return 0;
}
string g(char a,string b){
  string res="";
  res.push_back(a);
  res+=b;
  return res;
}

unordered_map<string,ll> nz;

unordered_map<string,vector<string> >v;
unordered_set<string> vis;
bool done;
void dfs(string x){
  if(vis.find(x)!=vis.end())return;
  vis.insert(x);
  if(nz[x]!=0)done=1;
  for(auto y:v[x]){
    dfs(y);
  }
}
int main(){
    ll n,h;
    cin>>n>>h;
    lol(i,n){
      string a,b,c,d;cin>>a>>b>>c>>d;
      string s,t;
      if(c=="0")s=g('x',a);
      else s=g('y',c);
      nz[s]++;
      if(d=="0")t=g('y',b);
      else t=g('x',d);
      nz[t]--;
      //cout<<s<<" "<<t<<endl;
      v[s].push_back(t);
      v[t].push_back(s);
    }
    for(auto dat:nz){
      string key=dat.first;
      ll cnt=dat.second;
      //cout<<key<<" "<<cnt<<endl;
      //if(cnt>=2||cnt<=-2)return NOEL();
      if(cnt>0&&key[0]!='x')return NOEL();
      if(cnt<0&&key[0]!='y')return NOEL();
      if(vis.find(key)==vis.end()){
	done=0; dfs(key);
	if(done==0)return NOEL();
      }
    }
    cout<<"YES"<<endl;
    return 0;
}
