def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) idx += 1 M = int(data[idx]) idx += 1 A = list(map(int, data[idx:idx+N])) idx += N B = list(map(int, data[idx:idx+M])) idx += M C = list(map(int, data[idx:idx+M])) idx += M # Compute Z-array for A + '#' + B A_str = list(map(str, A)) B_str = list(map(str, B)) concat = A_str + ['#'] + B_str L = len(concat) Z = [0] * L Z[0] = 0 # Not used l, r = 0, 0 for i in range(1, L): if i <= r: Z[i] = min(r - i + 1, Z[i - l]) while i + Z[i] < L and concat[Z[i]] == concat[i + Z[i]]: Z[i] += 1 if i + Z[i] - 1 > r: l = i r = i + Z[i] - 1 max_k = [0] * M len_A = len(A) for i in range(M): pos = len_A + 1 + i if pos < L: max_k[i] = min(Z[pos], len_A) else: max_k[i] = 0 dp = [float('inf')] * (M + 1) dp[0] = 0 for j in range(M): if dp[j] == float('inf'): continue m = max_k[j] if m == 0: continue for k in range(1, m + 1): if j + k > M: continue if dp[j + k] > dp[j] + k * C[j]: dp[j + k] = dp[j] + k * C[j] if dp[M] == float('inf'): print(-1) else: print(dp[M]) if __name__ == '__main__': main()