#include<bits/stdc++.h>
using namespace std;
pair<long long,long long> calc(vector<pair<pair<long long,long long>,long long>>& wut, long long lamb) {
priority_queue<long long> idk;
priority_queue<long long> banana;
long long n = wut.size();
long long ans = 0,br = 0;
for(long long i = 0; i < n; i++) {
long long c = wut[i].second;
if(wut[i].first.second == 0) {
idk.push(-c);
}
else {
long long x = 1,y = 1;
if(!idk.empty()) {
x = -idk.top()+c-lamb;
}
if(!banana.empty()) {
y = c-banana.top();
}
if(min(x,y) >= 0) {
continue;
}
if(x < y) {
idk.pop();
ans+=x;
br++;
banana.push(c);
}
else {
banana.pop();
banana.push(c);
ans+=y;
}
}
}
return {ans,br};
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
long long n,k;
cin >> n >> k;
vector<pair<pair<long long,long long>,long long>> a(0);
vector<pair<pair<long long,long long>,long long>> b(0);
for(long long i = 0; i < n; i++) {
long long t,x,y,c;
cin >> t >> x >> y >> c;
if(t == 1) {
a.push_back({{x,1},c});
}
else if(t == 2) {
a.push_back({{x,0},c});
}
else if(t == 3) {
b.push_back({{y,1},c});
}
else {
b.push_back({{y,0},c});
}
}
sort(a.begin(),a.end());
sort(b.begin(),b.end());
long long c = calc(a,1000000000000LL).second,d = calc(b,1000000000000LL).second;
if(c+d < k) {
cout << -1;
return 0;
}
long long l = 0,r = 1000000000000LL;
while(l < r) {
long long mid = (l+r+1)/2;
long long w = calc(a,mid).second+calc(b,mid).second;
if(w > k) {
r = mid-1;
}
else {
l = mid;
}
}
pair<long long,long long> y1 = calc(a,l);
pair<long long,long long> y2 = calc(b,l);
pair<long long,long long> z1 = calc(a,l+1);
pair<long long,long long> z2 = calc(b,l+1);
pair<long long,long long> y = {y1.first+y2.first,y1.second+y2.second},z = {z1.first+z2.first,z1.second+z2.second};
y = {y.first+y.second*l,y.second};
z = {z.first+z.second*(l+1),z.second};
if(y.second == k) {
cout << y.first;
return 0;
}
long long dif = (z.first-y.first)/(z.second-y.second);
long long ans = y.first+(k-y.second)*dif;
cout << ans;
return 0;
}