#include <bits/stdc++.h>
using namespace std;
template <typename S, typename T>
void fill_(S& buf, const T& x) {
  fill_n(reinterpret_cast<T*>(&buf), sizeof(buf) / sizeof(T), x);
}
template <typename T, int N>
inline int countof(const T (&)[N]) {
  return N;
}
template <typename T>
inline vector<T>& operator+=(vector<T>& ret, const T& x) {
  ret.push_back(x);
  return ret;
}
struct Stair {
  long long l, r, init;
};
long long N, M, K;
Stair xs[100005];
long long ks[105];
int main(int argc, char* argv[]) {
  cin >> N >> M >> K;
  for (int i = int(0), CNT_i = int(M); i < CNT_i; ++i)
    scanf("%I64d%I64d%I64d", &xs[i].l, &xs[i].r, &xs[i].init);
  for (int i = int(0), CNT_i = int(K); i < CNT_i; ++i) scanf("%I64d", &ks[i]);
  long long acc = 0;
  for (int i = int(0), CNT_i = int(K); i < CNT_i; ++i) {
    const long long k = ks[i];
    for (int j = int(0), CNT_j = int(M); j < CNT_j; ++j)
      if (xs[j].l <= k && k <= xs[j].r) acc += xs[j].init + (k - xs[j].l);
  }
  cout << acc << endl;
  return 0;
}
