def solve(): N, S = map(int, input().split()) X = list(map(int, input().split())) W = list(map(int, input().split())) # Sより左と右に分ける left = [] # Sに近い順(xが大きい順) right = [] # Sに近い順(xが小さい順) for i in range(N): if X[i] < S: left.append((X[i], W[i])) else: right.append((X[i], W[i])) left.sort(reverse=True) # Sに近い順 right.sort() # Sに近い順 L, R = len(left), len(right) total_weight = sum(W) # 累積和(配達済み重量の計算用) left_sum = [0] * (L + 1) for i in range(L): left_sum[i + 1] = left_sum[i] + left[i][1] right_sum = [0] * (R + 1) for j in range(R): right_sum[j + 1] = right_sum[j] + right[j][1] INF = float('inf') dp = [[[INF] * 2 for _ in range(R + 1)] for _ in range(L + 1)] dp[0][0][0] = dp[0][0][1] = 0 for i in range(L + 1): for j in range(R + 1): for d in range(2): if dp[i][j][d] == INF: continue # 現在位置 if i == 0 and j == 0: cur_pos = S elif d == 0: cur_pos = left[i - 1][0] else: cur_pos = right[j - 1][0] # 残り重量 remaining = total_weight - left_sum[i] - right_sum[j] # 左に進む if i < L: dist = abs(cur_pos - left[i][0]) dp[i + 1][j][0] = min(dp[i + 1][j][0], dp[i][j][d] + dist * remaining) # 右に進む if j < R: dist = abs(cur_pos - right[j][0]) dp[i][j + 1][1] = min(dp[i][j + 1][1], dp[i][j][d] + dist * remaining) print(min(dp[L][R][0], dp[L][R][1])) solve()