#include <bits/stdc++.h>
using namespace std;
const int N = 100005, M = 1000005;
using ll = long long;
const ll inf = LLONG_MAX >> 5;
class FlowGraph {
 private:
  int head[N], v[M], nxt[M], ptr, t;
  ll w[M];
  inline void padd_edge(int uu, int vv, ll ww) {
    v[ptr] = vv;
    w[ptr] = ww;
    nxt[ptr] = head[uu];
    head[uu] = ptr++;
  }
  int dis[N], cur[N];
  bool vis[N];
  bool bfs(int s, int t) {
    memset(vis, 0, sizeof(vis));
    memset(dis, -1, sizeof(dis));
    queue<int> q;
    q.push(s);
    dis[s] = 1;
    while (!q.empty()) {
      int nd = q.front();
      q.pop();
      for (int i = head[nd]; i != -1; i = nxt[i])
        if (w[i] && dis[v[i]] == -1) {
          dis[v[i]] = dis[nd] + 1;
          q.push(v[i]);
        }
    }
    return dis[t] != -1;
  }
  ll dfs(int pos, ll flow) {
    if (pos == t) return flow;
    ll tmp = flow;
    for (int &i = cur[pos]; i != -1; i = nxt[i])
      if (w[i] && dis[v[i]] == dis[pos] + 1) {
        ll fl = dfs(v[i], min(flow, w[i]));
        w[i] -= fl;
        w[i ^ 1] += fl;
        flow -= fl;
        if (!flow) break;
      }
    return tmp - flow;
  }

 public:
  FlowGraph() {
    memset(head, -1, sizeof(head));
    memset(nxt, -1, sizeof(nxt));
  }
  inline void add_edge(int uu, int vv, ll ww) {
    padd_edge(uu, vv, ww);
    padd_edge(vv, uu, 0);
  }
  ll dinic(int s, int t) {
    this->t = t;
    ll ret = 0;
    while (bfs(s, t)) {
      memcpy(cur, head, sizeof(cur));
      ret += dfs(s, inf);
    }
    return ret;
  }
};
FlowGraph g;
int n, h, m;
inline int id(int x, int y) { return (x - 1) * (h + 2) + y + 1; }
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> h >> m;
  int s = 0, t = 10000;
  for (int i = 1; i <= n; i++) g.add_edge(s, id(i, 0), inf);
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= h + 1; j++)
      if (j != h + 1)
        g.add_edge(id(i, j), id(i, j + 1), h * h - j * j);
      else
        g.add_edge(id(i, j), t, inf);
  int l, r, x, c, lim = id(n, h + 1);
  for (int i = 1; i <= m; i++) {
    cin >> l >> r >> x >> c;
    g.add_edge(lim + i, t, c);
    for (int j = l; j <= r; j++) g.add_edge(id(j, x + 1), lim + i, inf);
  }
  cout << h * h * n - g.dinic(s, t) << endl;
  return 0;
}
