MOD = 10**18 + 3 BASE = 10**9 + 7 def main(): import sys input = sys.stdin.read data = input().split() ptr = 0 N, M = int(data[ptr]), int(data[ptr+1]) ptr += 2 A = list(map(int, data[ptr:ptr+N])) ptr += N B = list(map(int, data[ptr:ptr+M])) ptr += M C = list(map(int, data[ptr:ptr+M])) ptr += M # Compute hash for A ha = [0] * (N + 1) power_a = [1] * (N + 1) for i in range(N): ha[i+1] = (ha[i] * BASE + A[i]) % MOD power_a[i+1] = (power_a[i] * BASE) % MOD # Compute hash for B hb = [0] * (M + 1) power_b = [1] * (M + 1) for i in range(M): hb[i+1] = (hb[i] * BASE + B[i]) % MOD power_b[i+1] = (power_b[i] * BASE) % MOD k_max = [0] * M for i in range(M): if B[i] != A[0]: continue max_len = 0 low = 1 high = min(N, M - i) while low <= high: mid = (low + high) // 2 if i + mid > M: high = mid - 1 continue hash_a = (ha[mid] - ha[0] * power_a[mid]) % MOD hash_b_part = (hb[i + mid] - hb[i] * power_b[mid]) % MOD if hash_a == hash_b_part: max_len = mid low = mid + 1 else: high = mid - 1 k_max[i] = max_len INF = 1 << 60 dp = [INF] * (M + 1) dp[0] = 0 for i in range(M): if dp[i] == INF: continue max_k = k_max[i] for k in range(1, max_k + 1): j = i + k if j > M: continue if j > M: break cost = k * C[i] if dp[j] > dp[i] + cost: dp[j] = dp[i] + cost if dp[M] == INF: print(-1) else: print(dp[M]) if __name__ == "__main__": main()