#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
template <const long long MXN>
struct mcmf {
  struct edge {
    long long ter, cap, cost, opp;
    inline edge(long long ter, long long cap, long long cost, long long opp)
        : ter(ter), cap(cap), cost(cost), opp(opp) {}
  };
  queue<long long> q;
  bool vis[MXN];
  vector<edge> e[MXN];
  long long fs, ft, dis[MXN], cure[MXN];
  inline mcmf() { memset(vis, 0, sizeof(vis)); }
  inline void adde(long long ts, long long tt, long long tcap,
                   long long tcost) {
    e[ts].push_back(edge(tt, tcap, tcost, e[tt].size()));
    e[tt].push_back(edge(ts, 0, -tcost, e[ts].size() - 1));
  }
  inline bool spfa() {
    memset(dis, 0x3f, sizeof(dis));
    dis[fs] = 0;
    q.push(fs);
    while (!q.empty()) {
      long long p = q.front();
      q.pop();
      vis[p] = 0;
      for (long long i = 0; i < (long long)e[p].size(); i++) {
        edge &nx = e[p][i];
        long long nd = dis[p] + nx.cost;
        if (dis[nx.ter] <= nd || !nx.cap) continue;
        dis[nx.ter] = nd;
        if (!vis[nx.ter]) {
          vis[nx.ter] = 1;
          q.push(nx.ter);
        }
      }
    }
    return dis[ft] < INF;
  }
  inline long long dinic(long long p, long long fin) {
    if (p == ft) return fin;
    vis[p] = 1;
    long long fout = 0;
    for (long long &i = cure[p]; i < (long long)e[p].size(); i++) {
      edge &nx = e[p][i];
      if (dis[nx.ter] != dis[p] + nx.cost || vis[nx.ter] || !nx.cap) continue;
      long long delt = dinic(nx.ter, min(fin - fout, nx.cap));
      if (delt) {
        nx.cap -= delt;
        e[nx.ter][nx.opp].cap += delt;
        fout += delt;
        if (fin == fout) break;
      } else
        dis[nx.ter] = -INF;
    }
    return vis[p] = 0, fout;
  }
  inline pair<long long, long long> run(long long ts, long long tt) {
    fs = ts, ft = tt;
    pair<long long, long long> res;
    while (spfa()) {
      memset(cure, 0, sizeof(cure));
      long long tmp = dinic(fs, INF);
      res.first += tmp, res.second += tmp * dis[ft];
    }
    return res;
  }
};
mcmf<(long long)2e3 + 5> f;
long long m, n, sum;
inline long long eid(long long x) { return 2 + n + x; }
inline long long pid(long long x) { return 2 + x; }
int main() {
  cin >> n >> m;
  for (long long i = 1, tmp; i <= n; i++) {
    cin >> tmp;
    f.adde(pid(i), 2, tmp, 0);
  }
  for (long long i = 1, ts, tt, tw; i <= m; i++) {
    cin >> ts >> tt >> tw;
    sum += tw;
    f.adde(eid(i), pid(ts), INF, 0);
    f.adde(eid(i), pid(tt), INF, 0);
    f.adde(1, eid(i), tw, 0);
  }
  cout << sum - f.run(1, 2).first;
  return 0;
}
