#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
struct Seg {
  long long sum, t;
  int l, r;
  int ls, rs;
} seg[N * 2];
int seg_tot;
void build(int k, int l, int r) {
  seg[k].t = 0;
  seg[k].sum = 0;
  seg[k].l = l;
  seg[k].r = r;
  if (l == r) {
    seg[k].ls = seg[k].rs = -1;
    return;
  }
  seg[k].ls = ++seg_tot;
  seg[k].rs = ++seg_tot;
  int mid = (seg[k].l + seg[k].r) >> 1;
  build(seg[k].ls, l, mid);
  build(seg[k].rs, mid + 1, r);
}
void add(int k, int l, int r, int st) {
  if (l <= seg[k].l && seg[k].r <= r) {
    seg[k].t++;
    seg[k].sum += st + seg[k].l - l;
  } else {
    int mid = (seg[k].l + seg[k].r) >> 1;
    if (l <= mid) add(seg[k].ls, l, r, st);
    if (r > mid) add(seg[k].rs, l, r, st);
  }
}
long long ans;
void query(int k, int x) {
  ans += seg[k].sum + seg[k].t * (x - seg[k].l);
  int mid = (seg[k].l + seg[k].r) >> 1;
  if (seg[k].l == seg[k].r) return;
  if (x <= mid)
    query(seg[k].ls, x);
  else
    query(seg[k].rs, x);
}
int n, m, K;
int main() {
  int i, j, k, t, nc = 0;
  while (scanf("%d%d%d", &n, &m, &K) != EOF) {
    seg_tot = 0;
    build(0, 1, n);
    for (i = 0; i < m; i++) {
      int a, b, c;
      scanf("%d%d%d", &a, &b, &c);
      add(0, a, b, c);
    }
    ans = 0;
    for (i = 0; i < K; i++) {
      scanf("%d", &j);
      query(0, j);
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
