#include using namespace std; /* clang-format off */ /* TYPES */ #define ll long long //~ #define pii pair //~ #define pll pair //~ #define vi vector //~ #define vll vector //~ #define mii map //~ #define si set //~ #define sc set /* FUNCTIONS */ //~ #define f(i,s,e) for(long long int i=s;i=s;i--) //~ #define pb push_back //~ #define eb emplace_back /* PRINTS */ //~ template //~ void print_v(vector &v) { cout << "{"; for (auto x : v) cout << x << ","; cout << "\b}"; } //~ #define MOD 1000000007 //~ #define PI 3.1415926535897932384626433832795 //~ #define read(type) readInt() //~ ll min(ll a,int b) { if (ab) return a; return b; } //~ ll max(int a,ll b) { if (a>b) return a; return b; } //~ ll gcd(ll a,ll b) { if (b==0) return a; return gcd(b, a%b); } //~ ll lcm(ll a,ll b) { return a/gcd(a,b)*b; } //~ string to_upper(string a) { for (int i=0;i<(int)a.size();++i) if (a[i]>='a' && a[i]<='z') a[i]-='a'-'A'; return a; } //~ string to_lower(string a) { for (int i=0;i<(int)a.size();++i) if (a[i]>='A' && a[i]<='Z') a[i]+='a'-'A'; return a; } //~ bool prime(ll a) { if (a==1) return 0; for (int i=2;i<=round(sqrt(a));++i) if (a%i==0) return 0; return 1; } //~ void yes() { cout<<"YES\n"; } //~ void no() { cout<<"NO\n"; } const int MAXN = 1e5 + 5; int treesPos[MAXN]; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int N, M; auto distance = [] (int i, int j) { return std::abs(i-j); }; cin >> N >> M; set trees; ll sum = 0; for(int i = 0; i < N; i++) { int a; cin >> a; trees.insert(a); treesPos[a] = 1; } for(int i = 0; i < M; i++) { ll f, b, w; cin >> f >> b >>w; if(treesPos[f] == 1) { sum += w; continue; } auto dis = upper_bound(trees.begin(), trees.end(), f); if(dis == trees.end()) { dis--; } auto also = dis; if(also != trees.begin()) { also--; } int diff = min(abs(*dis - f), abs(*also - f)); // int diff = abs(*dis - f); // cout << f << " " << diff << "\n"; sum += max(b, w-diff); } cout << sum ; return 0; }