## https://yukicoder.me/problems/no/2332 import heapq MAX_INT = 10 ** 18 def main(): N, M = map(int, input().split()) A = list(map(int, input().split())) B = list(map(int, input().split())) C = list(map(int, input().split())) # 座標圧縮 value_set = set() for a in A: value_set.add(a) for b in B: value_set.add(b) value_list = list(value_set) value_list.sort() value_map = {} for i, v in enumerate(value_list): value_map[v] = i + 1 A = [value_map[a] for a in A] B = [value_map[b] for b in B] value_max = len(value_list) H = 10000000000000069 B_ = value_max + 1 # Aのローリングハッシュ hash_a_list = [0] * N hash_a = 0 for i in range(N): hash_a *= B_ hash_a %= H hash_a += A[i] hash_a %= H hash_a_list[i] = hash_a # Bのローリングハッシュ hash_b_list = [0] * M hash_b = 0 for i in range(M): hash_b *= B_ hash_b %= H hash_b += B[i] hash_b %= H hash_b_list[i] = hash_b pow_b_ = [0] * (max(N, M) + 1) b_ = 1 for i in range(max(N, M) + 1): pow_b_[i] = b_ b_ *= B_ b_ %= H def solve(mid, i): hash_a = hash_a_list[mid] hash_b = hash_b_list[i + mid] if i > 0: hash_b -= (hash_b_list[i - 1] * pow_b_[mid + 1]) % H return hash_a == hash_b array = [MAX_INT] * (M + 1) array[0] = 0 queue = [] for i in range(M): while len(queue) > 0 and queue[0][1] < i + 1: heapq.heappop(queue) if array[i] < MAX_INT and A[0] == B[i]: low = 0 high = min(M - 1 - i, N - 1) while high - low > 1: mid = (high + low ) // 2 if solve(mid, i): low = mid else: high = mid if solve(high, i): v = high else: v = low heapq.heappush(queue, (C[i], i + 1 + v)) if len(queue) > 0: array[i + 1] = queue[0][0] if array[-1] >= MAX_INT: print(-1) else: ans = sum(array) print(ans) if __name__ == "__main__": main()