#include using namespace std; #define REP(i,N) for(i=0;i P; typedef struct{ int first; int second; int third; }T; //昇順 bool comp_Se(T& l, T& r){ return l.second < r.second; } int main(void){ int N; ll L; cin >> N >> L; vector > v(2*N); int i; REP(i,N){ cin >> v[i].first; v[i].second = 0; } REP(i,N){ cin >> v[N+i].first; v[N+i].second = 1; } sort(v.begin(),v.end()); int index; ll count=0,max=0,min=0; pair p; vector d(v.size()); REP(i,v.size()){ if(!v[i].second)count++; else count--; if(count >= max){ max = count; index = i; } if(count < min) min = count; } ll ans; if(max>0) ans = (max-min-1)*L + v[index+1].first; else ans = (max-min)*L + v[0].first; cout << ans << endl; return 0; }