import pypyjit pypyjit.set_param("max_unroll_recursion=-1") import sys sys.setrecursionlimit(10**7) from functools import cache import bisect N,S = list(map(int,input().split())) X = list(map(int,input().split())) W = list(map(int,input().split())) @cache def f(l,r,now_left,having): if(l == X[0] and r == X[-1]):return 0 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) return ret print(f(S,S,True,sum(W)))