#include using namespace std; int main() { //https://atcoder.jp/contests/joi2024ho/submissions/71732435 long long N,S,L = 1000000; cin >> N >> S;// >> L; vector X(N); for(auto &x : X) cin >> x; sort(X.begin(),X.end()); vector Xs = X; Xs.erase(unique(Xs.begin(),Xs.end()),Xs.end()); long long n = Xs.size(); long long Q = 1; //cin >> Q; //if(n >= 1100){ // while(Q--) cout << "No\n"; // return 0; //} vector C(n); for(auto &c : C) cin >> c; //for(auto &x : X) C.at(lower_bound(Xs.begin(),Xs.end(),x)-Xs.begin())++; auto Cl = C,Cr = C; for(long long i=1; i=0; i--) Cr.at(i) += Cr.at(i+1); vector> L1(n,vector(n,8e18)),L2 = L1,R1 = L1,R2 = L1; L1.at(0).at(n-1) = 0,R2.at(0).at(n-1) = 0; for(long long len=n-1; len>0; len--){ for(long long l=0; l+len> s >> g >> t; t -= N; int pos = upper_bound(Xs.begin(),Xs.end(),g)-Xs.begin(); bool yes = false; long long answer = 8e18; { long long time; if(pos){ time = 0;//abs(Xs.at(0)-s); time += min(L1.at(pos-1).at(pos-1),L2.at(pos-1).at(pos-1))+abs(Xs.at(pos-1)-g)*(Cl.back()); //if(time <= t) yes = true; answer = min(answer,time); } if(pos < n){ time = 0;//abs(Xs.at(0)-s); time += min(L1.at(pos).at(pos),L2.at(pos).at(pos))+abs(Xs.at(pos)-g)*(Cl.back()); //if(time <= t) yes = true; answer = min(answer,time); } } { long long time; if(pos){ time = 0;//abs(Xs.at(n-1)-s); time += min(R1.at(pos-1).at(pos-1),R2.at(pos-1).at(pos-1))+abs(Xs.at(pos-1)-g)*(Cl.back()); //if(time <= t) yes = true; answer = min(answer,time); } if(pos < n){ time = 0;//abs(Xs.at(n-1)-s); time += min(R1.at(pos).at(pos),R2.at(pos).at(pos))+abs(Xs.at(pos)-g)*(Cl.back()); //if(time <= t) yes = true; answer = min(answer,time); } } //if(yes) cout << "Yes\n"; //else cout << "No\n"; cout << answer << "\n"; } }