#include <bits/stdc++.h>
using namespace std;
int N = 200000;
long long i, j, m, n, k, l, r, t, f, x, y, z, x2, y2, z2, ans,
    ma = -1, pre[200000], mi = 1e18, s;
struct ed {
  long long iz, v, c, fl, co, pr;
};
vector<ed> v;
void add(long long x, long long y, long long z) {
  v.push_back(ed{x, y, z, 0, 0, pre[x]});
  pre[x] = v.size() - 1;
  v.push_back(ed{y, x, 0, 0, 0, pre[y]});
  pre[y] = v.size() - 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  long long s = 0;
  long long f = n + m + 1;
  long long nV = n + m + 2;
  for (i = 0; i <= nV; i++) pre[i] = -1;
  for (i = 1; i <= n; i++) {
    cin >> x;
    add(s, i, x);
  }
  for (i = 1; i <= m; i++) {
    cin >> x >> y >> z;
    add(x, i + n, 1e9);
    add(y, i + n, 1e9);
    add(i + n, f, z);
    ans += z;
  }
  vector<vector<long long> > flow(nV, vector<long long>(nV, 0));
  vector<bool> p(nV, 0);
  vector<long long> pr(nV, -1);
  queue<long long> q;
  for (z = 1; z <= nV; z++) {
    p.assign(nV, 0);
    pr.assign(nV, -1);
    q.push(s);
    p[s] = 1;
    while (!q.empty()) {
      long long cur = q.front();
      q.pop();
      for (long long e = pre[cur]; e != -1; e = v[e].pr) {
        long long to = v[e].v;
        if (v[e].fl < v[e].c) {
          if (p[to] == 0) {
            p[to] = 1;
            q.push(to);
            pr[to] = e;
          }
        }
      }
    }
    if (pr[f] == -1) break;
    long long t = f;
    mi = 1e9;
    while (t != s) {
      long long e1 = pr[t];
      long long e2 = 1 ^ e1;
      mi = min(mi, v[e1].c - v[e1].fl);
      t = v[e1].iz;
    }
    t = f;
    while (t != s) {
      long long e1 = pr[t];
      long long e2 = 1 ^ e1;
      v[e1].fl += mi;
      v[e2].fl -= mi;
      t = v[e1].iz;
    }
  }
  for (long long e = pre[f]; e != -1; e = v[e].pr) {
    ans += v[e].fl;
  }
  cout << ans;
}
