#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;
}
