#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
using pii = pair<int, int>;
using vi = vector<int>;
const int MAXN = 60000 + 7;
int matching[MAXN]; //left part
vector<pii> graf[MAXN];
int odw[MAXN];
int aktodw = 1;
bool dfs(int v) {
if (odw[v] == aktodw) return 0;
odw[v] = aktodw;
for (auto & [s, val] : graf[v]) {
if (matching[s] == 0) {
matching[s] = v;
return 1;
}
}
for (auto & [s, val] : graf[v]) {
if (odw[matching[s]] != aktodw && dfs(matching[s])) {
matching[s] = v;
return 1;
}
}
return 0;
}
int n;
int aktsum[2];
vi cykl;
int startv;
bool czycykl;
void dfs2(int v) {
if (odw[v]) {
if (v == startv) czycykl = 1;
return;
}
cykl.push_back(v);
odw[v] = 1;
int v2 = 0;
for (auto & [s, val] : graf[v]) {
if (matching[s] == v) {
if (s <= n / 2) aktsum[0] += val;
else aktsum[0] -= val;
}
else {
v2 = s;
if (s <= n / 2) aktsum[1] += val;
else aktsum[1] -= val;
}
}
dfs2(matching[v2]);
}
const int MAXV = 20 * MAXN;
int ile[MAXV];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int c;
cin >> n >> c;
n *= 2;
int l, r, val, sum = 0;
for (int i = 1; i <= n; i++) {
cin >> l >> r >> val;
graf[i].push_back({l, val});
graf[i].push_back({r + n / 2, val});
}
int ans = 0;
for (int i = 1; i <= n; i++) {
aktodw++;
if (dfs(i)) ans++;
}
if (ans != n) {
cout << "NO\n";
return 0;
}
vi sumy;
int sum2 = 0;
for (int i = 0; i <= n; i++) odw[i] = 0;
vi liczby;
for (int i = 1; i <= n; i++) {
if (odw[i]) continue;
aktsum[0] = 0;
aktsum[1] = 0;
cykl.clear();
startv = i;
czycykl = 0;
dfs2(i);
if (!czycykl) {
for (int v : cykl) {
odw[v] = 0;
}
for (auto & [s, val] : graf[i]) {
if (matching[s] == i) {
if (s <= n / 2) {
sum2 += val;
}
else sum2 -= val;
}
}
continue;
}
//dp = (dp << abs(aktsum[0])) | (dp >> abs(aktsum[0]));
sum += abs(aktsum[0]);
ile[abs(aktsum[0])] ++;
}
bitset<MAXN * 20 + 10> dp;
dp.flip(0);
for (int i = 1; i < MAXV; i++) {
if (ile[i] >= 3 && i * 2 < MAXV) {
int r = ile[i] % 2;
if (!r) r = 2;
ile[i * 2] += ((ile[i] - r) / 2);
ile[i] = r;
}
while (ile[i]--) dp |= (dp << i);
}
for (int k = 0; k <= sum; k++) {
if (dp[k] && abs(sum2 + (k - (sum - k))) <= c) {
cout << "YES\n";
return 0 ;
}
}
cout << "NO\n";
return 0;
}