#include <bits/stdc++.h>
using namespace std;
const int N = 3e3 + 7, M = 1e5 + 7;
const long long inf = 1e18;
int head[N], headi[N], ver[M], nxt[M], d[N], tot;
long long edge[M];
int n, m, S, T;
void add(int x, int y, long long z) {
  ver[++tot] = y, edge[tot] = z, nxt[tot] = head[x], head[x] = tot;
  ver[++tot] = x, edge[tot] = 0, nxt[tot] = head[y], head[y] = tot;
}
bool bfs() {
  for (int i = 0; i <= T; i++) d[i] = 0;
  queue<int> q;
  q.push(S), d[S] = 1;
  while (q.size()) {
    int x = q.front();
    q.pop();
    for (int i = head[x]; i; i = nxt[i]) {
      int y = ver[i];
      if (d[y] || !edge[i]) continue;
      d[y] = d[x] + 1, q.push(y);
      if (y == T) return true;
    }
  }
  return false;
}
long long dinic(int x, long long flow) {
  if (x == T) return flow;
  long long rest = flow, k;
  for (int i = headi[x]; i; i = nxt[i]) {
    int y = ver[i];
    if (d[y] == d[x] + 1 && edge[i]) {
      k = dinic(y, min(rest, edge[i]));
      if (!k)
        d[y] = 0;
      else
        edge[i] -= k, edge[i ^ 1] += k, rest -= k;
      if (!rest) break;
    }
  }
  return flow - rest;
}
int main() {
  scanf("%d%d", &n, &m);
  S = 0, T = n + m + 1, tot = 1;
  long long sum = 0;
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    add(i + m, T, x);
  }
  for (int i = 1; i <= m; i++) {
    int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    add(S, i, z);
    add(i, x + m, inf), add(i, y + m, inf);
    sum += z;
  }
  long long ans = 0;
  while (bfs()) {
    for (int i = 0; i <= T; i++) headi[i] = head[i];
    long long flow;
    while (flow = dinic(S, inf)) ans += flow;
  }
  printf("%lld\n", sum - ans);
  return 0;
}
