#include <bits/stdc++.h>
const int maxn = 0x3f3f3f3f;
const double EI =
    2.71828182845904523536028747135266249775724709369995957496696762772407663035354594571382178525166427;
const double PI = 3.141592653589793238462643383279;
using namespace std;
struct ss {
  int s, t, d;
  long long w;
  bool operator<(const ss &rhs) const {
    if (w == rhs.w) {
      return d < rhs.d;
    }
    return w < rhs.w;
  }
} z[100010];
long long c[100010][210];
inline bool comp(ss a, ss b) { return a.s < b.s; }
int main(void) {
  int n, m, k, i, j, pos, d;
  long long num, ans;
  while (~scanf("%d %d %d", &n, &m, &k)) {
    for (i = 0; i < k; i++) {
      scanf("%d %d %d %lld", &z[i].s, &z[i].t, &z[i].d, &z[i].w);
    }
    priority_queue<ss> q;
    for (i = 2; i <= n + 1; i++) {
      for (j = 0; j <= m; j++) {
        c[i][j] = 0x3f3f3f3f3f3f3f3f;
      }
    }
    sort(z, z + k, comp);
    pos = 0;
    for (i = 1; i <= n; i++) {
      while (pos < k && z[pos].s <= i && z[pos].t >= i) {
        q.push(z[pos++]);
      }
      num = -1;
      while (!q.empty()) {
        if (q.top().s <= i && q.top().t >= i) {
          num = q.top().w;
          d = q.top().d;
          break;
        } else {
          q.pop();
        }
      }
      if (q.empty()) {
        for (j = 0; j <= m; j++) {
          c[i + 1][j] = min(c[i + 1][j], c[i][j]);
        }
      } else {
        for (j = 0; j <= m; j++) {
          c[min(n + 1, 1 + d)][j] = min(c[min(n + 1, 1 + d)][j], num + c[i][j]);
        }
        for (j = 1; j <= m; j++) {
          c[i + 1][j] = min(c[i + 1][j], c[i][j - 1]);
        }
      }
    }
    ans = 0x3f3f3f3f3f3f3f3f;
    for (i = 0; i <= m; i++) {
      ans = min(ans, c[n + 1][i]);
    }
    printf("%lld\n", ans);
  }
  return 0;
}
