#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, z;
int Len, Next[10005], Son[2005], Cap[10005], Link[10005], cur[2005];
int Deep[2005];
int s, t;
long long Sum;
void AddEdge(int x, int y, int z) {
  Len++;
  Next[Len] = Son[x];
  Son[x] = Len;
  Link[Len] = y;
  Cap[Len] = z;
}
int Dfs(int u, int flow) {
  if (u == t) return flow;
  for (int& i = cur[u]; i; i = Next[i]) {
    if ((Deep[Link[i]] == Deep[u] + 1) && (Cap[i])) {
      int di = Dfs(Link[i], min(flow, Cap[i]));
      if (di) {
        Cap[i] -= di;
        Cap[((i - 1) ^ 1) + 1] += di;
        return di;
      }
    }
  }
  return 0;
}
int Bfs() {
  queue<int> Q;
  while (!Q.empty()) Q.pop();
  memset(Deep, 0, sizeof(Deep));
  Deep[s] = 1;
  Q.push(s);
  while (!Q.empty()) {
    int u = Q.front();
    Q.pop();
    for (int i = Son[u]; i; i = Next[i]) {
      if ((!Deep[Link[i]]) && (Cap[i])) {
        Deep[Link[i]] = Deep[u] + 1;
        Q.push(Link[i]);
      }
    }
  }
  return Deep[t];
}
long long Maxflow() {
  long long ans = 0;
  while (Bfs()) {
    for (int i = 0; i <= t; i++) cur[i] = Son[i];
    while (int d = Dfs(s, 0x3f3f3f3f)) ans += 1ll * d;
  }
  return ans;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    AddEdge(m + i, n + m + 1, x);
    AddEdge(n + m + 1, m + i, 0);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &x, &y, &z);
    Sum += 1ll * z;
    AddEdge(0, i, z);
    AddEdge(i, 0, 0);
    AddEdge(i, m + x, 0x3f3f3f3f);
    AddEdge(m + x, i, 0);
    AddEdge(i, m + y, 0x3f3f3f3f);
    AddEdge(m + y, i, 0);
  }
  s = 0;
  t = n + m + 1;
  printf("%lld\n", Sum - Maxflow());
}
