#include <bits/stdc++.h>
using namespace std;
vector<string> token(string a) {
  vector<string> w;
  a.push_back(' ');
  while (!a.empty()) {
    w.push_back(a.substr(0, a.find(" ")));
    a = a.substr(a.find(" ") + 1, a.size() - 1);
  }
  return w;
}
map<string, int> mapik;
vector<string> amapik;
int dodaj(string a) {
  if (mapik.count(a) == 0) {
    mapik[a] = mapik.size() - 1;
    amapik.push_back(a);
  }
  return mapik[a];
}
char tmp_str[1000];
string scanf_string() {
  scanf("%s", tmp_str);
  return tmp_str;
}
const int N = 100060;
int n, k, m;
int a[N];
int b[N];
int c[N];
long long policz(int k) {
  long long res = 0;
  for (int i = 0; i < m; i++) {
    if (a[i] <= k && k <= b[i]) {
      res += (k - a[i]) + c[i];
    }
  }
  return res;
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 0; i < m; i++) {
    scanf("%d%d%d", &a[i], &b[i], &c[i]);
  }
  long long res = 0;
  int tmp;
  for (int i2 = 0; i2 < k; i2++) {
    scanf("%d", &tmp);
    res += policz(tmp);
  }
  printf("%I64d\n", res);
  return 0;
}
