#include <bits/stdc++.h>
using namespace std;
const long long int inf = (long long int)1e18 + 10;
struct tariff {
  long long int x, c, p;
} v[2 * 1000056];
long long int sum[4 * 1000056] = {0}, totsum[4 * 1000056] = {0};
bool cmp(tariff a, tariff b) { return (a.x < b.x); }
void update(long long int x, long long int s, long long int e, long long int p,
            long long int c) {
  if (e == s && s == p) {
    sum[x] += c;
    totsum[x] += p * c;
    return;
  }
  if (p <= (s + e) / 2)
    update(2 * x, s, (s + e) / 2, p, c);
  else
    update(2 * x + 1, (s + e) / 2 + 1, e, p, c);
  sum[x] = sum[2 * x] + sum[2 * x + 1];
  totsum[x] = totsum[2 * x] + totsum[2 * x + 1];
}
long long int qry(long long int x, long long int s, long long int e,
                  long long int k) {
  if (s == e) return min(totsum[x], k * s);
  if (k < sum[2 * x])
    return qry(2 * x, s, (s + e) / 2, k);
  else
    return totsum[2 * x] + qry(2 * x + 1, (s + e) / 2 + 1, e, k - sum[2 * x]);
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int n, k, m, l, r, c, p;
  long long int ans = 0, j = 0;
  cin >> n >> k >> m;
  for (long long int i = 1; i <= m; i++) {
    cin >> l >> r >> c >> p;
    j++;
    v[j].x = l;
    v[j].c = c;
    v[j].p = p;
    j++;
    v[j].x = r + 1;
    v[j].c = -c;
    v[j].p = p;
  }
  sort(v + 1, v + j + 1, cmp);
  long long int g = 1;
  for (long long int i = 1; i <= n; i++) {
    while (g <= j && v[g].x <= i) update(1, 1, 1000006, v[g].p, v[g].c), g++;
    ans += qry(1, 1, 1000006, k);
  }
  cout << ans << "\n";
}
