#include <bits/stdc++.h>
using namespace std;
int len, n, h, m, l, r, x, c, cnt, ans, i, j, go[20001], to[20001], last[5001],
    w[20001], dis[5001], gap[5001], cur[5001];
void make(int x, int y, int z) {
  go[++len] = y;
  to[len] = last[x];
  w[len] = z;
  last[x] = cur[x] = len;
}
void add(int x, int y, int z) {
  make(x, y, z);
  make(y, x, 0);
}
int sap(int x, int flow) {
  if (x == 4001) return flow;
  int tmp, have = flow;
  for (int i = last[x]; i; i = to[i]) {
    last[x] = i;
    if (w[i] && dis[x] == dis[go[i]] + 1) {
      tmp = sap(go[i], min(have, w[i]));
      w[i] -= tmp;
      w[i ^ 1] += tmp;
      have -= tmp;
      if (!have) return flow;
    }
  }
  last[x] = cur[x];
  if (!--gap[dis[x]]) dis[4000] = 4001;
  ++gap[++dis[x]];
  return flow - have;
}
int main() {
  scanf("%d%d%d", &n, &h, &m);
  len = 1;
  for (i = 1; i <= n; i++) {
    add(4000, (i - 1) * (h + 1) + 0 + 1, 1000000007);
    for (j = 0; j < h; j++) {
      add((i - 1) * (h + 1) + j + 1, (i - 1) * (h + 1) + j + 1 + 1,
          h * h - j * j);
    }
  }
  cnt = (n - 1) * (h + 1) + h + 1;
  for (i = 1; i <= m; i++) {
    scanf("%d%d%d%d", &l, &r, &x, &c);
    if (x == h) continue;
    add(++cnt, 4001, c);
    for (j = l; j <= r; j++)
      add((j - 1) * (h + 1) + x + 1 + 1, cnt, 1000000007);
  }
  ans = n * h * h;
  while (dis[4000] < 4001) ans -= sap(4000, 1000000007);
  printf("%d", ans);
  return 0;
}
