#include<bits/stdc++.h>
using namespace std;

using ll = long long;

const int N = 1e5+5;

struct TopK {
    int M;
    multiset<ll> ms, res;
    ll sum;
    TopK(int m) : M(m), sum(0) {}
    void insert(ll v) {
        if (M <= 0) return;
        if ((int)ms.size() < M) {
            ms.insert(v);
            sum += v;
        } else {
            ll Min = *ms.begin();
            if (v > Min) {
                ms.erase(ms.begin());
                sum -= Min;
                res.insert(Min);

                ms.insert(v);
                sum += v;
            } else res.insert(v);
        }
    }
    void erase(ll v) {
        if (M <= 0) return;
        auto it = res.find(v);
        if (it != res.end()) res.erase(it);
        else {
            auto it2 = ms.find(v);
            if (it2 != ms.end()) {
                sum -= v;
                ms.erase(it2);
                if (!res.empty()) {
                    auto it_max = prev(res.end());
                    ll Max = *it_max;
                    ms.insert(Max);
                    sum += Max;
                    res.erase(it_max);
                }
            }
        }
    }
};

struct Event {
    ll t;
    int op, id;
    bool operator<(const Event& o) const {
        if (t != o.t) return t < o.t;
        return op < o.op;
    }
};

int n, m;
ll a[N], b[N], s[N], f[N];

void solve() {
    cin >> n >> m;
    vector<Event> events;
    for (int i = 0; i < n; i++) {
        cin >> a[i] >> b[i] >> s[i] >> f[i];
        events.push_back({s[i], 1, i});
        events.push_back({f[i], -1, i});
    }
    sort(events.begin(), events.end());
    TopK manager(m); 
    ll ans = 0, base = 0, last = 0;
    int i = 0, N = events.size();
    while (i < N) {
        ll cur = events[i].t;
        if (i > 0 && cur > last) ans += (cur - last) * (base + manager.sum);
        while (i < N && events[i].t == cur) {
            int id = events[i].id;
            ll d = a[id] - b[id];
            if (events[i].op == 1) {
                base += b[id];
                if (d > 0) manager.insert(d);
            } else {
                base -= b[id];
                if (d > 0) manager.erase(d);
            }
            i++;
        }
        last = cur;
    }
    cout << ans << '\n';
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);

    #define TASK "ORCONF"
    if (fopen(TASK".INP", "r")) {
        freopen(TASK".INP", "r", stdin);
        freopen(TASK".OUT", "w", stdout);
    }

    int tests = 1; // cin >> tests;
    while (tests--) solve();

    #ifndef ONLINE_JUDGE
    cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
    #endif

    return 0;
}