import sys input = sys.stdin.readline INF = 3 << 59 def solve(): n, s = map(int, input().split()) x = list(map(int, input().split())) w = list(map(int, input().split())) # 累積和 sumw = [0] * (n + 1) for i in range(n): sumw[i + 1] = sumw[i] + w[i] # dp[cur][r][side] dp = [ [[INF, INF] for _ in range(n + 1)], [[INF, INF] for _ in range(n + 1)] ] for l in range(n - 1, -1, -1): # 次の層を初期化 for j in range(n + 1): dp[1][j][0] = dp[1][j][1] = INF base = abs(x[l] - s) * sumw[n] dp[0][l + 1][0] = min(dp[0][l + 1][0], base) dp[0][l + 1][1] = min(dp[0][l + 1][1], base) for r in range(l + 1, n + 1): val = sumw[n] - sumw[r] + sumw[l] # 右を広げる if r < n: cost0 = dp[0][r][0] + val * abs(x[l] - x[r]) cost1 = dp[0][r][1] + val * abs(x[r - 1] - x[r]) dp[0][r + 1][1] = min(dp[0][r + 1][1], cost0, cost1) # 左を広げる if l > 0: cost0 = dp[0][r][0] + val * abs(x[l] - x[l - 1]) cost1 = dp[0][r][1] + val * abs(x[r - 1] - x[l - 1]) dp[1][r][0] = min(dp[1][r][0], cost0, cost1) if l > 0: dp[0], dp[1] = dp[1], dp[0] print(min(dp[0][n][0], dp[0][n][1])) if __name__ == "__main__": solve()