#include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; using vi = vector; using vvi = vector; using vvvi = vector; using vll = vector; using vvll = vector; using vvvll = vector; using vmi = vector; using vvmi = vector; using vvvmi = vector; #define all(a) (a).begin(), (a).end() #define rep2(i, m, n) for (int i = (m); i < (n); ++i) #define rep(i, n) rep2(i, 0, n) #define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i) #define drep(i, n) drep2(i, n, 0) using p = pair; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; ll s; cin >> n >> s; vll x(n+1, s), w(n+1, 0); rep(i, n)cin >> x[i+1]; rep(i, n)cin >> w[i+1]; vector

vp = {{s, 0}}; rep(i, n)vp.push_back({x[i+1], i+1}); sort(all(vp)); int a = 0; while(vp[a].first < s)a++; vll sum(n+2, 0); rep(i, n+1)sum[i+1] = sum[i] + w[vp[i].second]; vvvll dp(n+1, vvll(n+1, vll(2, 1e18))); dp[a][a][0] = dp[a][a][1] = 0; rep2(k, 1, n+1){ rep(j, k+1){ int l = a-j, r = a + k - j; if(l < 0 || r < 0 || r > n)continue; ll tmp1 = sum[n+1] - (sum[r] - sum[l]), tmp2 = sum[n+1] - (sum[r+1] - sum[l+1]); ll tmp3 = sum[n+1] - (sum[r+1] - sum[l]); ll d1 = x[vp[l+1].second] - x[vp[l].second], d2 = x[vp[r].second] - x[vp[r-1].second]; ll d3 = x[vp[r].second] - x[vp[l+1].second], d4 = x[vp[r-1].second] - x[vp[l].second]; ll d5 = x[vp[r].second] - x[vp[l].second]; dp[l][r][0] = min({dp[l+1][r][0]+d1*tmp2 , dp[l+1][r][1] + (d1+d3)*tmp2, dp[l][r-1][0] + (d4+d2)*tmp1 + d5*tmp3, dp[l][r-1][1] + d2*tmp1 + d5*tmp3}); dp[l][r][1] = min({dp[l+1][r][0] +d1*tmp2 + d5*tmp3, dp[l+1][r][1] + (d1+d3)*tmp2 + d5*tmp3, dp[l][r-1][0] + (d2+d4)*tmp1, dp[l][r-1][1] + d2*tmp1}); } }cout << min(dp[0][n][0], dp[0][n][1]) << endl; return 0; }