#include <bits/stdc++.h>
using namespace std;
using cd = complex<double>;
mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());
long long dis[2005], it[2005], a[2005];
struct ppp {
  long long t, v, f;
};
vector<ppp> edge[2005];
void add(long long s, long long t, long long v) {
  long long fs = edge[t].size(), ft = edge[s].size();
  edge[s].push_back({t, v, fs});
  edge[t].push_back({s, 0, ft});
}
void bfs(long long s) {
  memset(dis, -1, sizeof(dis));
  dis[s] = 0;
  queue<long long> q;
  q.push(s);
  while (q.size()) {
    long long u = q.front();
    q.pop();
    for (long long i = 0; i < edge[u].size(); i++) {
      ppp v = edge[u][i];
      if (dis[v.t] != -1 || v.v <= 0) continue;
      dis[v.t] = dis[u] + 1;
      q.push(v.t);
    }
  }
}
long long dfs(long long u, long long t, long long f) {
  if (u == t) return f;
  for (long long &o = it[u]; o < edge[u].size(); o++) {
    ppp &i = edge[u][o];
    if (i.v > 0 && dis[u] < dis[i.t]) {
      long long d = dfs(i.t, t, min(f, i.v));
      if (d > 0) {
        i.v -= d;
        edge[i.t][i.f].v += d;
        return d;
      }
    }
  }
  return 0;
}
long long getmx(long long s, long long t) {
  long long ans = 0;
  while (1) {
    bfs(s);
    long long f = 0;
    if (dis[t] < 0) return ans;
    memset(it, 0, sizeof(it));
    while ((f = dfs(s, t, 2e9)) > 0) ans += f;
  }
}
int main() {
  long long n, m, sum = 0;
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
    add(i + m, n + 1 + m, a[i]);
  }
  for (long long i = 1; i <= m; i++) {
    long long u, v, w;
    cin >> u >> v >> w;
    add(0, i, w);
    sum += w;
    add(i, u + m, 2e13);
    add(i, v + m, 2e13);
  }
  cout << sum - getmx(0, n + m + 1) << endl;
}
