import sys import heapq import time # 入力高速化版 # ===== 入出力ヘルパ ===== def input() -> str: return sys.stdin.readline().rstrip() def INT() -> int: return int(input()) def MAP(): return map(int, input().split()) def LIST() -> list[int]: return list(MAP()) # ===== 定数 ===== INF = 10 ** 18 # ===== 関数短縮 ===== hepu = heapq.heappush hpo = heapq.heappop # ============================================== # =================== main ===================== # ============================================== def main() -> None: start_time = time.time() input_data = sys.stdin.read().split() it = iter(input_data) N = int(next(it)) M = int(next(it)) edges = dict(zip(range(N), [[] for _ in range(N)])) for _ in range(M): u = int(next(it)) v = int(next(it)) w = int(next(it)) edges[u-1].append((v-1, w)) edges[v-1].append((u-1, w)) A = [0] + [int(next(it)) for _ in range(N)] B = [0] + [int(next(it)) for _ in range(N)] C = [0] + [int(next(it)) for _ in range(N)] h = [] hepu(h, (1, 0)) f = [INF] * N f[0] = 1 def hpu(h: list, x: tuple) -> None: if x[0] < f[x[1]]: hepu(h, x) while h: c, u = hpo(h) f[u] = min(f[u], c) if u == N-1: print(c) end_time = time.time() elapsed_time = end_time - start_time print(f"Elapsed time: {elapsed_time:.6f} seconds", file=sys.stderr) return c = (c+A[u]-1) // A[u] k = c c *= A[u] for v, t in edges[u]: if k % B[u] == 0: hpu(h, (c+t+min(A[u],C[u]), v)) else: hpu(h, (c+t, v)) if __name__ == "__main__": main()