#include <bits/stdc++.h>   using namespace std;   int read() {     int nm = 0, f = 1;     char c = getchar();     for (; !isdigit(c); c = getchar())       if (c ==  - ) f = -1;     for (; isdigit(c); c = getchar()) nm = nm * 10 + c -  0 ;     return nm * f;   }   long long cup[10001], flow[10001], to[10001], head[10001], nxt[10001],       deep[10001];   bool vis[10001];   int n, m, s, t, cnt = 1;   long long ans = 0;   void push(int vi, int vj, long long v) {     cnt++, to[cnt] = vj, nxt[cnt] = head[vi], head[vi] = cnt, cup[cnt] = v;     cnt++, to[cnt] = vi, nxt[cnt] = head[vj], head[vj] = cnt;   }   bool bfs(int be, int ed) {     memset(deep, 0, sizeof(deep));     deep[be] = 1;     queue<int> q;     q.push(be);     while (!q.empty()) {       int now = q.front();       q.pop();       for (int i = head[now]; i; i = nxt[i]) {         int vj = to[i];         if (flow[i] >= cup[i] || deep[vj]) continue;         deep[vj] = deep[now] + 1;         q.push(vj);         if (vj == ed) return true;       }     }     return false;   }   long long dfs(int now, int ed, long long f) {     if (f == 0 || now == ed) return f;     long long tot = 0, x;     for (int i = head[now]; i; i = nxt[i]) {       int vj = to[i];       if (deep[vj] != deep[now] + 1) continue;       if (x = dfs(vj, ed, min(f, cup[i] - flow[i]))) {         flow[i] += x;         flow[i ^ 1] -= x;         tot += x;         f -= x;       }       if (f == 0) break;     }     if (tot == 0) deep[now] = -1;     return tot;   }   void Dinic(int be, int ed) {     while (bfs(be, ed)) ans -= dfs(be, ed, 1ll << 50);   }   int main() {     n = read(), m = read();     s = n + m + 1, t = s + 1;     for (int i = 1; i <= n; i++) {       push(i, t, read());     }     for (int i = 1; i <= m; i++) {       int vi = read(), vj = read(), v = read();       ans += v;       push(s, n + i, v);       push(n + i, vi, 1ll << 50);       push(n + i, vj, 1ll << 50);     }     Dinic(s, t);     cout << ans <<   n ;     return 0;   }   