#include <cstdio>
#include <vector>
#include <queue>
#include <limits>
#include <algorithm>
using namespace std;
#define inf 1000000000
struct NetworkFlow {
struct Edge {
int target, inverse_index;
int capacity, flow;
Edge(int t, int c, int ii): target(t), capacity(c), flow(0), inverse_index(ii) {}
int residual() const { return capacity - flow; }
};
int V;
vector< vector<Edge> > adj;
vector<int> levels, edges_tried;
NetworkFlow(int V): V(V), adj(V), levels(V), edges_tried(V) {}
void add_edge(int a, int b, int a2b, int b2a=0) {
int a2b_index = adj[a].size(), b2a_index = adj[b].size();
adj[a].push_back(Edge(b, a2b, b2a_index));
adj[b].push_back(Edge(a, b2a, a2b_index));
}
bool assign_levels(int source, int sink) {
fill(levels.begin(), levels.end(), -1);
queue<int> q; q.push(source);
levels[source] = 0;
while(!q.empty()) {
int here = q.front(); q.pop();
for(int i = 0; i < adj[here].size(); ++i) {
const Edge& e = adj[here][i];
if(levels[e.target] == -1 && e.residual() > 0) {
levels[e.target] = levels[here] + 1;
q.push(e.target);
}
}
}
return levels[sink] != -1;
}
int push_flow(int here, int sink, int flow) {
if(here == sink) return flow;
for(int& i = edges_tried[here]; i < adj[here].size(); ++i) {
Edge& e = adj[here][i];
if(e.residual() > 0 && levels[e.target] == levels[here]+1) {
int amt = push_flow(e.target, sink, min(flow, e.residual()));
if(amt > 0) {
Edge& e_inv = adj[e.target][e.inverse_index];
e.flow += amt;
e_inv.flow = -e.flow;
return amt;
}
}
}
return 0;
}
int go(int source, int sink) {
int total_flow = 0;
while(assign_levels(source, sink)) {
fill(edges_tried.begin(), edges_tried.end(), 0);
while(true) {
int pushed = push_flow(source, sink, numeric_limits<int>::max());
if(pushed == 0) break;
total_flow += pushed;
}
}
return total_flow;
}
};
int main() {
int n, m;
scanf("%d%d",&n,&m);
NetworkFlow f(n+m+2);
int a, b, c, res = 0;
for (int i = 1; i <= n; i++) {
scanf("%d",&c);
f.add_edge(m+i,n+m+1,c,0);
}
for (int i = 1; i <= m; i++) {
scanf("%d%d%d",&a,&b,&c);
f.add_edge(i,m+a,inf,0);
f.add_edge(i,m+b,inf,0);
f.add_edge(0,i,c,0);
res += c;
}
res -= f.go(0, m+n+1);
printf("%d",res);
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8bGltaXRzPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGluZiAxMDAwMDAwMDAwCnN0cnVjdCBOZXR3b3JrRmxvdyB7CglzdHJ1Y3QgRWRnZSB7CgkJaW50IHRhcmdldCwgaW52ZXJzZV9pbmRleDsKCQlpbnQgY2FwYWNpdHksIGZsb3c7IAoJCUVkZ2UoaW50IHQsIGludCBjLCBpbnQgaWkpOiB0YXJnZXQodCksIGNhcGFjaXR5KGMpLCBmbG93KDApLCBpbnZlcnNlX2luZGV4KGlpKSB7fQoJCWludCByZXNpZHVhbCgpIGNvbnN0IHsgcmV0dXJuIGNhcGFjaXR5IC0gZmxvdzsgfQoJfTsKCWludCBWOwoJdmVjdG9yPCB2ZWN0b3I8RWRnZT4gPiBhZGo7Cgl2ZWN0b3I8aW50PiBsZXZlbHMsIGVkZ2VzX3RyaWVkOwoKCU5ldHdvcmtGbG93KGludCBWKTogVihWKSwgYWRqKFYpLCBsZXZlbHMoViksIGVkZ2VzX3RyaWVkKFYpIHt9CgoJdm9pZCBhZGRfZWRnZShpbnQgYSwgaW50IGIsIGludCBhMmIsIGludCBiMmE9MCkgewoJCWludCBhMmJfaW5kZXggPSBhZGpbYV0uc2l6ZSgpLCBiMmFfaW5kZXggPSBhZGpbYl0uc2l6ZSgpOwoJCWFkalthXS5wdXNoX2JhY2soRWRnZShiLCBhMmIsIGIyYV9pbmRleCkpOwoJCWFkaltiXS5wdXNoX2JhY2soRWRnZShhLCBiMmEsIGEyYl9pbmRleCkpOwoJfQoKCWJvb2wgYXNzaWduX2xldmVscyhpbnQgc291cmNlLCBpbnQgc2luaykgewoJCWZpbGwobGV2ZWxzLmJlZ2luKCksIGxldmVscy5lbmQoKSwgLTEpOwoJCXF1ZXVlPGludD4gcTsgcS5wdXNoKHNvdXJjZSk7CgkJbGV2ZWxzW3NvdXJjZV0gPSAwOwoJCXdoaWxlKCFxLmVtcHR5KCkpIHsKCQkJaW50IGhlcmUgPSBxLmZyb250KCk7IHEucG9wKCk7CgkJCWZvcihpbnQgaSA9IDA7IGkgPCBhZGpbaGVyZV0uc2l6ZSgpOyArK2kpIHsgCgkJCQljb25zdCBFZGdlJiBlID0gYWRqW2hlcmVdW2ldOyAKCQkJCWlmKGxldmVsc1tlLnRhcmdldF0gPT0gLTEgJiYgZS5yZXNpZHVhbCgpID4gMCkgewoJCQkJCWxldmVsc1tlLnRhcmdldF0gPSBsZXZlbHNbaGVyZV0gKyAxOwoJCQkJCXEucHVzaChlLnRhcmdldCk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIGxldmVsc1tzaW5rXSAhPSAtMTsKCX0KCglpbnQgcHVzaF9mbG93KGludCBoZXJlLCBpbnQgc2luaywgaW50IGZsb3cpIHsKCQlpZihoZXJlID09IHNpbmspIHJldHVybiBmbG93OwoKCQlmb3IoaW50JiBpID0gZWRnZXNfdHJpZWRbaGVyZV07IGkgPCBhZGpbaGVyZV0uc2l6ZSgpOyArK2kpIHsgCgkJCUVkZ2UmIGUgPSBhZGpbaGVyZV1baV07IAoJCQlpZihlLnJlc2lkdWFsKCkgPiAwICYmIGxldmVsc1tlLnRhcmdldF0gPT0gbGV2ZWxzW2hlcmVdKzEpIHsKCQkJCWludCBhbXQgPSBwdXNoX2Zsb3coZS50YXJnZXQsIHNpbmssIG1pbihmbG93LCBlLnJlc2lkdWFsKCkpKTsKCQkJCWlmKGFtdCA+IDApIHsKCQkJCQlFZGdlJiBlX2ludiA9IGFkaltlLnRhcmdldF1bZS5pbnZlcnNlX2luZGV4XTsKCQkJCQllLmZsb3cgKz0gYW10OwoJCQkJCWVfaW52LmZsb3cgPSAtZS5mbG93OwoJCQkJCXJldHVybiBhbXQ7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIDA7Cgl9CgoJaW50IGdvKGludCBzb3VyY2UsIGludCBzaW5rKSB7CgkJaW50IHRvdGFsX2Zsb3cgPSAwOwoJCXdoaWxlKGFzc2lnbl9sZXZlbHMoc291cmNlLCBzaW5rKSkgewoJCQlmaWxsKGVkZ2VzX3RyaWVkLmJlZ2luKCksIGVkZ2VzX3RyaWVkLmVuZCgpLCAwKTsKCQkJd2hpbGUodHJ1ZSkgewoJCQkJaW50IHB1c2hlZCA9IHB1c2hfZmxvdyhzb3VyY2UsIHNpbmssIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKCQkJCWlmKHB1c2hlZCA9PSAwKSBicmVhazsKCQkJCXRvdGFsX2Zsb3cgKz0gcHVzaGVkOwoJCQl9CgkJfQoJCXJldHVybiB0b3RhbF9mbG93OwoJfQp9OwppbnQgbWFpbigpIHsKCWludCBuLCBtOwoJc2NhbmYoIiVkJWQiLCZuLCZtKTsKCU5ldHdvcmtGbG93IGYobittKzIpOwoJaW50IGEsIGIsIGMsIHJlcyA9IDA7Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQlzY2FuZigiJWQiLCZjKTsKCQlmLmFkZF9lZGdlKG0raSxuK20rMSxjLDApOwoJfQoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CgkJc2NhbmYoIiVkJWQlZCIsJmEsJmIsJmMpOwoJCWYuYWRkX2VkZ2UoaSxtK2EsaW5mLDApOwoJCWYuYWRkX2VkZ2UoaSxtK2IsaW5mLDApOwoJCWYuYWRkX2VkZ2UoMCxpLGMsMCk7CgkJcmVzICs9IGM7Cgl9CglyZXMgLT0gZi5nbygwLCBtK24rMSk7CglwcmludGYoIiVkIixyZXMpOwp9