#include <bits/stdc++.h>
long long h[2500], nxt[201000], to[201000], cap[201000], K = 1;
long long level[2500], iter[2500], hh, tt, q[201000];
void ins(long long u, long long v, long long c) {
  nxt[++K] = h[u];
  h[u] = K;
  to[K] = v;
  cap[K] = c;
}
void insw(long long u, long long v, long long c) {
  ins(u, v, c);
  ins(v, u, 0);
}
long long bfs(long long S, long long T) {
  hh = tt = 0;
  q[tt++] = S;
  memset(level, 0, sizeof(level));
  level[S] = 1;
  while (hh < tt) {
    long long u = q[hh++];
    iter[u] = h[u];
    for (long long i = h[u]; i; i = nxt[i]) {
      if (cap[i] && !level[to[i]]) {
        level[to[i]] = level[u] + 1;
        q[tt++] = to[i];
      }
    }
  }
  return level[T];
}
long long dfs(long long u, long long f, long long T) {
  if (u == T) return f;
  long long used = 0, w;
  for (long long &i = iter[u]; i; i = nxt[i]) {
    if (cap[i] && level[to[i]] == level[u] + 1) {
      w = dfs(to[i], std::min(f - used, cap[i]), T);
      if (w) {
        cap[i] -= w;
        cap[i ^ 1] += w;
        used += w;
        if (used == f) return f;
      }
    }
  }
  return used;
}
long long dinic(long long S, long long T) {
  long long f = 0;
  while (bfs(S, T)) f += dfs(S, 1e18, T);
  return f;
}
signed main() {
  long long n, m;
  scanf("%lld%lld", &n, &m);
  long long S = n + m + 1, T = n + m + 2;
  for (long long i = 1; i <= n; i++) {
    long long a;
    scanf("%lld", &a);
    insw(i, T, a);
  }
  long long id = n;
  long long ans = 0;
  for (long long i = 1; i <= m; i++) {
    long long u, v, a;
    scanf("%lld%lld%lld", &u, &v, &a);
    ++id;
    insw(id, u, 1e18);
    insw(id, v, 1e18);
    insw(S, id, a);
    ans += a;
  }
  printf("%lld\n", ans - dinic(S, T));
  return 0;
}
