#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
const int inf = ~0U >> 1;
template <class T>
struct Dinic {
  const static int N = 10101, M = N * 10;
  int s, t, n, h[N], cur[N], lv[N], q[N], e, ne[M], to[M];
  T cap[M], flow;
  void liu(int u, int v, T w) {
    to[e] = v;
    ne[e] = h[u];
    cap[e] = w;
    h[u] = e++;
  }
  void link(int u, int v, T w) {
    liu(u, v, w);
    liu(v, u, 0);
  }
  void ini(int _n = N) {
    fill(h, h + (n = _n), -1);
    e = 0;
  }
  bool bfs() {
    int L = 0, R = 0;
    fill(lv, lv + n, -1);
    lv[q[R++] = s] = 0;
    while (L < R && !~lv[t]) {
      int c = q[L++];
      for (int k = h[c]; ~k; k = ne[k])
        if (cap[k] > 0 && !~lv[to[k]]) lv[q[R++] = to[k]] = lv[c] + 1;
    }
    return ~lv[t];
  }
  T dfs(int c, T mx) {
    if (c == t) return mx;
    T ret = 0;
    for (int &k = cur[c]; ~k; k = ne[k]) {
      if (lv[to[k]] == lv[c] + 1 && cap[k] > 0) {
        T flow = dfs(to[k], min(mx, cap[k]));
        ret += flow;
        cap[k] -= flow, cap[k ^ 1] += flow;
        mx -= flow;
        if (!mx) return ret;
      }
    }
    lv[c] = -1;
    return ret;
  }
  T run(int _s, int _t) {
    s = _s, t = _t;
    flow = 0;
    while (bfs()) {
      copy(h, h + n, cur);
      flow += dfs(s, ~0U >> 1);
    }
    return flow;
  }
};
Dinic<long long> flow;
int n, m;
int a[N];
int main() {
  long long ans = 0;
  cin >> n >> m;
  flow.ini();
  int s = 0, t = flow.N - 2;
  for (int i = (1); i < (n + 1); i++) cin >> a[i], flow.link(m + i, t, a[i]);
  int u, v, w;
  for (int i = (1); i < (m + 1); i++) {
    cin >> u >> v >> w;
    flow.link(i, u + m, inf);
    flow.link(i, v + m, inf);
    flow.link(s, i, w);
    ans += w;
  }
  ans -= flow.run(s, t);
  cout << ans << "\n";
  return 0;
}
