import pypyjit pypyjit.set_param("max_unroll_recursion=-1") import sys sys.setrecursionlimit(10**7) import bisect N,S = list(map(int,input().split())) X = list(map(int,input().split())) W = list(map(int,input().split())) LEFT = min(S, X[0]) RIGHT = max(S, X[-1]) memo = {} def f(l,r,now_left,having): if(l == LEFT and r == RIGHT):return 0 if((l,r,now_left) in memo):return memo[(l,r,now_left)] ret = 1<<60 if(not now_left): if(r < X[-1]): right = bisect.bisect_right(X, r) dist = X[right] - r ret = min(ret, f(l,X[right],False,having - W[right]) + dist * having) if(l > X[0]): left = bisect.bisect_left(X, l) - 1 dist = r - X[left] ret = min(ret, f(X[left],r,True,having - W[left]) + dist * having) else: if(r < X[-1]): right = bisect.bisect_right(X, r) dist = X[right] - l ret = min(ret, f(l,X[right],False,having - W[right]) + dist * having) if(l > X[0]): left = bisect.bisect_left(X, l) - 1 dist = l - X[left] ret = min(ret, f(X[left],r,True,having - W[left]) + dist * having) memo[(l,r,now_left)] = ret return ret print(f(S,S,True,sum(W)))