import heapq N,M = map(int,input().split()) A = {} for _ in range(M): u,v,w = map(int,input().split()) if u>v: u,v = v,u if (u,v) not in A: A[(u,v)] = w else: if A[(u,v)]>w: A[(u,v)] = w G = {i:[] for i in range(1,N+1)} for u,v in A: G[u].append((v,A[(u,v)])) G[v].append((u,A[(u,v)])) A = [0]+list(map(int,input().split())) B = [0]+list(map(int,input().split())) C = [0]+list(map(int,input().split())) INFTY = 10**15 dist = [INFTY for _ in range(N+1)] dist[1] = 0 heap = [(0,1)] visited = [False for _ in range(N+1)] while heap: d,u = heapq.heappop(heap) if d>dist[u]:continue visited[u] = True for v,w in G[u]: if visited[v]:continue r = d%A[u] q = d//A[u] t = A[u]-r if r>0 or d==0: q += 1 if q%B[u]>0: if dist[v]>q*A[u]+w: dist[v] = q*A[u]+w heapq.heappush(heap,(q*A[u]+w,v)) else: s = q*A[u]+w+min(C[u],A[u]) if dist[v]>s: dist[v] = s heapq.heappush(heap,(s,v)) print(dist[N])