import sys
import collections

N, M = map(int, sys.stdin.readline().strip().split())
pw = list(map(int, sys.stdin.readline().strip().split()))
es = {}
eps = {}
pes = {}
for i in range(N):
  pes[i] = set()

for i in range(M):
  p0, p1, w = map(int, sys.stdin.readline().strip().split())
  p0 = p0 - 1 # 0開始にする
  p1 = p1 - 1
  # 点から直接つながっている辺の情報の追加
  pes[p0].add(i)
  pes[p1].add(i)
  es[i] = [p0, p1, w]
  # 辺から直接つながっている点の情報の追加
  eps[i] = set([p0, p1])

# print("辺情報、始点終点ウェイト {}".format(es))
# print("辺情報、直接つながる点 {}".format(eps))
# print("点情報、直接つながる辺 {}".format(pes))

def countW(e):
  # print(e)
  p0 = es[e][0]
  p1 = es[e][1]
  # たどった辺の情報
  e1 = set([e])
  while True:
    # 辺をとる
    e2 = (pes[p0] | pes[p1]) - e1 # set演算
    # 新しい辺がない場合
    if len(e2) == 0:
      break
    e1 = e2 | e1
  # print(e1)
  pall = set()
  for ei in e1:
    # eの分も入る
    # print(eps[ei])
    pall = pall | eps[ei]
  # print(pall)
  # ウェイトの計算
  w = 0
  for pi in pall:
    w += pw[pi]
  return w

# print(countW(0))

survived = set(range(M))
# print(survived)

while True:
  flag = False
  snew = survived.copy()
  # print(snew)
  for i in survived:
    # 辺の重みのほうが大きかったらTrue
    if countW(i) < es[i][2]:
      flag = True
      snew.discard(i)
      """
      そういう辺は全部消す。消したところで、点の重みの和が減っていくので、
      だめだった他の辺が大丈夫になるようなことはない。
      """
      pes[es[i][0]].discard(i)
      pes[es[i][1]].discard(i)
  # print(snew)
  survived = snew
  # すべて大丈夫だったら
  if flag == False:
    break
  if len(survived) <= 0:
    break

ans = M - len(survived)
print(ans)
