#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int x;
  scanf("%d", &x);
  return x;
}
template <typename T>
inline istream& operator>>(istream& i, vector<T>& v) {
  for (int j = 0; j < ((int)(v).size()); ++j) i >> v[j];
  return i;
}
template <typename T>
string join(const vector<T>& v) {
  stringstream s;
  for (int i = 0; i < ((int)(v).size()); ++i) s << ' ' << v[i];
  return s.str().substr(1);
}
template <typename T>
inline ostream& operator<<(ostream& o, const vector<T>& v) {
  if ((int)(v).size()) o << join(v);
  return o;
}
template <typename T1, typename T2>
inline istream& operator>>(istream& i, pair<T1, T2>& v) {
  return i >> v.first >> v.second;
}
template <typename T1, typename T2>
inline ostream& operator<<(ostream& o, const pair<T1, T2>& v) {
  return o << v.first << "," << v.second;
}
template <typename T>
inline long long int suma(const vector<T>& a) {
  long long int res(0);
  for (auto&& x : a) res += x;
  return res;
}
const double eps = 1e-10;
const long long int LINF = 1001002003004005006ll;
const int INF = 1001001001;
const int MX = 200005;
int n, m;
int dp[55][55][55];
struct Q {
  int l, r, x, c;
  int cost(int i, int h) {
    if (l <= i && i < r && h > x) return c;
    return 0;
  }
};
vector<Q> q;
int dfs(int l, int r, int h) {
  if (l == r) return 0;
  int& now = dp[l][r][h];
  if (now != -1) return now;
  now = 0;
  if (h) now = dfs(l, r, h - 1);
  for (int i = l; i < r; ++i) {
    int c = h * h;
    for (int k = 0; k < (m); ++k) {
      if (l <= q[k].l && q[k].r <= r) c -= q[k].cost(i, h);
    }
    c += dfs(l, i, h) + dfs(i + 1, r, h);
    (now = max(now, c));
  }
  return now;
}
int main() {
  int h;
  cin >> n >> h >> m;
  q = vector<Q>(m);
  for (int i = 0; i < (m); ++i) {
    int l, r, x, c;
    scanf("%d%d%d%d", &l, &r, &x, &c);
    --l;
    q[i] = (Q){l, r, x, c};
  }
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n + 1); ++j)
      for (int k = 0; k < (h + 1); ++k) dp[i][j][k] = -1;
  int ans = dfs(0, n, h);
  cout << ans << endl;
  return 0;
}
