#include <bits/stdc++.h>
using namespace std;
#define int long long
#define inf (long long)(1e15)
signed main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
//start here
int N,k;cin >> N >> k;
vector<vector<pair<int,int>>> loc(5);
for(int i = 1;i <= N;i++){
int t,x,y,c;
cin >> t >> x >> y >> c;
c++;
if(t <= 2) loc[t].push_back({x,c});
else loc[t].push_back({y,c});
}
auto solve = [&](vector<pair<int,int>> right,vector<pair<int,int>> left){
sort(left.begin(),left.end());
sort(right.begin(),right.end());
vector<pair<int,int>> arr;
for(auto [loc,cost]:left){
int nloc = lower_bound(right.begin(),right.end(),pair<int,int>{loc+2,-1LL})-right.begin();
arr.push_back({nloc,-cost});
}
for(int i = 0;i < right.size();i++){
auto [loc,cost] = right[i];
arr.push_back({i,cost});
}
sort(arr.begin(),arr.end());
vector<vector<int>> dp(k+1,vector<int>(k+1,inf));
dp[0][0] = 0;
for(auto [loc,cost]:arr){
// cout << "??" << loc << " " << cost << endl;
vector<vector<int>> ndp = dp;
if(cost > 0){
for(int i = 0;i+1 <= k;i++){
for(int j = 0;j <= i;j++){
ndp[i+1][j] = min(ndp[i+1][j],dp[i][j]+abs(cost));
}
}
}else{
for(int i = 0;i <= k;i++){
for(int j = 0;j+1 <= i;j++){
ndp[i][j+1] = min(ndp[i][j+1],dp[i][j]+abs(cost));
}
}
}
swap(dp,ndp);
}
vector<int> ret(k+1);
for(int i = 0;i <= k;i++) ret[i] = dp[i][i];
return ret;
};
vector<int> ans1 = solve(loc[2],loc[1]);
vector<int> ans2 = solve(loc[4],loc[3]);
int ans = inf;
for(int i = 0;i <= k;i++){
ans = min(ans,ans1[i]+ans2[k-i]);
}
// for(auto &i:ans1) cout << i << " ";cout << endl;
// for(auto &i:ans2) cout << i << " ";cout << endl;
if(ans < inf){
cout << ans-2*k;
}else{
cout << "-1\n";
}
// cout << max(solve(loc[2],loc[1]),solve(loc[4],loc[3]));
}