#include <bits/stdc++.h>
#pragma GCC optimize("-O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;
const long long MOD = 1e9 + 7;
const long long INF = 1e18;
const long double E = 1e-8;
mt19937_64 rnd(time(0));
long long p1 = 31, p2 = 29, p3 = 7, p4 = rnd() % 100 + 1, md1 = MOD,
          md2 = 998244353, md3 = 998244357, md4 = rnd() % 1000000000;
long long n, m, k, h, T, x[300001], c[300001], dp[51][51][51], pen[55];
pair<long long, long long> a[300001];
long long tt[300001];
long long binpow(long long h, long long r, long long md = MOD) {
  long long l = 1;
  while (r) {
    if (r & 1) l *= h, l %= md;
    h *= h;
    h %= md;
    r /= 2;
  }
  return l;
}
long long gcd(long long x, long long y) {
  if (x < y) swap(x, y);
  while (x && y) {
    x %= y;
    swap(x, y);
  }
  return x + y;
}
struct dsu {
  long long d[200001];
  void make_set(int h) { d[h] = h; }
  long long find_set(int h) {
    if (h == d[h])
      return h;
    else
      return d[h] = find_set(d[h]);
  }
  void unite_sets(int x, int y) {
    x = find_set(x);
    y = find_set(y);
    if (x < y) swap(x, y);
    d[x] = y;
  }
};
int main() {
  cin >> n >> h >> m;
  for (int i = 1; i <= m; i++) {
    cin >> a[i].first >> a[i].second >> x[i] >> c[i];
  }
  for (int q = 1; q <= n; q++)
    for (int i = 1; i <= n - q + 1; i++) {
      long long j = i + q - 1;
      for (int mid = i; mid <= j; mid++) {
        for (int ht = 0; ht <= h; ht++) pen[ht] = 0;
        for (int u = 1; u <= m; u++)
          if (i < j) {
            if (a[u].first >= i && a[u].first <= mid && a[u].second > mid &&
                a[u].second <= j)
              pen[x[u] + 1] += c[u];
          } else if (a[u].first == a[u].second && a[u].first == i)
            pen[x[u] + 1] += c[u];
        long long mxl = 0, mxr = 0;
        for (int ht = 0; ht <= h; ht++) {
          if (i == j) {
            dp[i][j][ht] = ht * ht - pen[ht];
          } else {
            mxl = max(mxl, dp[i][mid][ht]);
            mxr = max(mxr, dp[mid + 1][j][ht]);
            dp[i][j][ht] = max(mxr + mxl - pen[ht], dp[i][j][ht]);
          }
          pen[ht + 1] += pen[ht];
        }
      }
    }
  long long ans = 0;
  for (int i = 0; i <= h; i++) ans = max(ans, dp[1][n][i]);
  cout << ans << "\n";
  return 0;
}
