#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 15e2 + 5;
const int M = 3e3 + 5;
template<typename T>
void minimize(T& a, const T& b) {
if (b < a) a = b;
}
// (pos, pos_type, obj_type) = (Vị trí (toạ độ) thực tế, loại vị trí, loại của búa/tường tại vị trí đấy)
// pos_type = 0 -> vị trí xuất phát
// pos_type = 1 -> vị trí đích
// pos_type = 2 -> vị trí có tường
// pos_type = 3 -> vị trí có búa
struct Point {
int pos, pos_type, obj_type;
bool operator<(const Point& other) const {
return pos < other.pos;
}
};
int n, m, x;
int y[N], z[N];
Point a[M]; // Lưu tất cả các vị trí (toạ độ) có trong bài (đánh index 1, 2, 3,...)
int beg, goal; // Index của vị trí xuất phát (điểm có toạ độ 0) và vị trí đích (điểm có toạ độ x)
int where[N]; // where[i] = Index của vị trí có búa loại i
void precompute() {
m = 0;
a[++m] = {0, 0, -1};
a[++m] = {x, 1, -1};
for (int i = 1; i <= n; i++) a[++m] = {y[i], 2, i};
for (int i = 1; i <= n; i++) a[++m] = {z[i], 3, i};
sort(a + 1, a + m + 1);
for (int i = 1; i <= m; i++) {
if (a[i].pos_type == 0) beg = i;
if (a[i].pos_type == 1) goal = i;
if (a[i].pos_type == 3) where[a[i].obj_type] = i;
}
}
// dp(l, r, end_point) = Quãng đường ngắn nhất còn lại để đi đến vị trí đích khi ta đã đi qua các vị trí có index nằm trong đoạn [l, r]
// end_point = 0/1: ta đang ở đầu mút l, hay đầu mút r
ll memo[M][M][2];
ll dp(int l, int r, bool end_point) {
if (l == goal || r == goal) return 0;
ll& ans = memo[l][r][end_point];
if (ans != -1) return ans;
ans = LINF;
int cur = (end_point) ? a[r].pos : a[l].pos; // Vị trí (toạ độ) thực tế mà ta đang đứng
// Mở rộng sang phải
if (r + 1 <= m) {
Point nxt = a[r + 1];
ll min_d = abs(cur - nxt.pos) + dp(l, r + 1, 1);
if (nxt.pos_type != 2) { // Đi vào vị trí không có tường
minimize(ans, min_d);
}
else { // Đi vào vị trí có tường
int hammer_idx = where[nxt.obj_type];
if (l <= hammer_idx && hammer_idx <= r) {
minimize(ans, min_d);
}
}
}
// Mở rộng sang trái
if (l - 1 >= 1) {
Point nxt = a[l - 1];
ll min_d = abs(cur - nxt.pos) + dp(l - 1, r, 0);
if (nxt.pos_type != 2) {
minimize(ans, min_d);
}
else {
int hammer_idx = where[nxt.obj_type];
if (l <= hammer_idx && hammer_idx <= r) {
minimize(ans, min_d);
}
}
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> x;
for (int i = 1; i <= n; i++) cin >> y[i];
for (int i = 1; i <= n; i++) cin >> z[i];
precompute();
memset(memo, -1, sizeof memo);
ll ans = dp(beg, beg, 0);
if (ans == LINF) ans = -1;
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxNWUyICsgNTsgCmNvbnN0IGludCBNID0gM2UzICsgNTsgCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIG1pbmltaXplKFQmIGEsIGNvbnN0IFQmIGIpIHsKCWlmIChiIDwgYSkgYSA9IGI7IAp9CgovLyAocG9zLCBwb3NfdHlwZSwgb2JqX3R5cGUpID0gKFbhu4sgdHLDrSAodG/huqEgxJHhu5kpIHRo4buxYyB04bq/LCBsb+G6oWkgduG7iyB0csOtLCBsb+G6oWkgY+G7p2EgYsO6YS90xrDhu51uZyB04bqhaSB24buLIHRyw60gxJHhuqV5KQovLyBwb3NfdHlwZSA9IDAgLT4gduG7iyB0csOtIHh14bqldCBwaMOhdAovLyBwb3NfdHlwZSA9IDEgLT4gduG7iyB0csOtIMSRw61jaAovLyBwb3NfdHlwZSA9IDIgLT4gduG7iyB0csOtIGPDsyB0xrDhu51uZwovLyBwb3NfdHlwZSA9IDMgLT4gduG7iyB0csOtIGPDsyBiw7phCnN0cnVjdCBQb2ludCB7CglpbnQgcG9zLCBwb3NfdHlwZSwgb2JqX3R5cGU7IAoJYm9vbCBvcGVyYXRvcjwoY29uc3QgUG9pbnQmIG90aGVyKSBjb25zdCB7CgkJcmV0dXJuIHBvcyA8IG90aGVyLnBvczsKCX0KfTsKCmludCBuLCBtLCB4OwppbnQgeVtOXSwgeltOXTsKClBvaW50IGFbTV07IC8vIEzGsHUgdOG6pXQgY+G6oyBjw6FjIHbhu4sgdHLDrSAodG/huqEgxJHhu5kpIGPDsyB0cm9uZyBiw6BpICjEkcOhbmggaW5kZXggMSwgMiwgMywuLi4pCmludCBiZWcsIGdvYWw7IC8vIEluZGV4IGPhu6dhIHbhu4sgdHLDrSB4deG6pXQgcGjDoXQgKMSRaeG7g20gY8OzIHRv4bqhIMSR4buZIDApIHbDoCB24buLIHRyw60gxJHDrWNoICjEkWnhu4NtIGPDsyB0b+G6oSDEkeG7mSB4KQppbnQgd2hlcmVbTl07IC8vIHdoZXJlW2ldID0gSW5kZXggY+G7p2EgduG7iyB0csOtIGPDsyBiw7phIGxv4bqhaSBpIAoKdm9pZCBwcmVjb21wdXRlKCkgewoJbSA9IDA7IAoJYVsrK21dID0gezAsIDAsIC0xfTsgCglhWysrbV0gPSB7eCwgMSwgLTF9OwoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBhWysrbV0gPSB7eVtpXSwgMiwgaX07IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBhWysrbV0gPSB7eltpXSwgMywgaX07IAoKCXNvcnQoYSArIDEsIGEgKyBtICsgMSk7ICAgCgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CgkJaWYgKGFbaV0ucG9zX3R5cGUgPT0gMCkgYmVnID0gaTsgCgkJaWYgKGFbaV0ucG9zX3R5cGUgPT0gMSkgZ29hbCA9IGk7ICAKCQlpZiAoYVtpXS5wb3NfdHlwZSA9PSAzKSB3aGVyZVthW2ldLm9ial90eXBlXSA9IGk7IAoJfQp9CgovLyBkcChsLCByLCBlbmRfcG9pbnQpID0gUXXDo25nIMSRxrDhu51uZyBuZ+G6r24gbmjhuqV0IGPDsm4gbOG6oWkgxJHhu4MgxJFpIMSR4bq/biB24buLIHRyw60gxJHDrWNoIGtoaSB0YSDEkcOjIMSRaSBxdWEgY8OhYyB24buLIHRyw60gY8OzIGluZGV4IG7hurFtIHRyb25nIMSRb+G6oW4gW2wsIHJdIAovLyAgICAgICAgICBlbmRfcG9pbnQgID0gMC8xOiB0YSDEkWFuZyDhu58gxJHhuqd1IG3DunQgbCwgaGF5IMSR4bqndSBtw7p0IHIKbGwgbWVtb1tNXVtNXVsyXTsgCgpsbCBkcChpbnQgbCwgaW50IHIsIGJvb2wgZW5kX3BvaW50KSB7CglpZiAobCA9PSBnb2FsIHx8IHIgPT0gZ29hbCkgcmV0dXJuIDA7IAoJCglsbCYgYW5zID0gbWVtb1tsXVtyXVtlbmRfcG9pbnRdOyAKCWlmIChhbnMgIT0gLTEpIHJldHVybiBhbnM7ICAKCglhbnMgPSBMSU5GOyAKCWludCBjdXIgPSAoZW5kX3BvaW50KSA/IGFbcl0ucG9zIDogYVtsXS5wb3M7IC8vIFbhu4sgdHLDrSAodG/huqEgxJHhu5kpIHRo4buxYyB04bq/IG3DoCB0YSDEkWFuZyDEkeG7qW5nCgoJLy8gTeG7nyBy4buZbmcgc2FuZyBwaOG6o2kKCWlmIChyICsgMSA8PSBtKSB7CgkJUG9pbnQgbnh0ID0gYVtyICsgMV07IAoJCWxsIG1pbl9kID0gYWJzKGN1ciAtIG54dC5wb3MpICsgZHAobCwgciArIDEsIDEpOyAKCQlpZiAobnh0LnBvc190eXBlICE9IDIpIHsgLy8gxJBpIHbDoG8gduG7iyB0csOtIGtow7RuZyBjw7MgdMaw4budbmcKCQkJbWluaW1pemUoYW5zLCBtaW5fZCk7IAoJCX0KCQllbHNlIHsgLy8gxJBpIHbDoG8gduG7iyB0csOtIGPDsyB0xrDhu51uZwoJCQlpbnQgaGFtbWVyX2lkeCA9IHdoZXJlW254dC5vYmpfdHlwZV07CgkJCWlmIChsIDw9IGhhbW1lcl9pZHggJiYgaGFtbWVyX2lkeCA8PSByKSB7CgkJCQltaW5pbWl6ZShhbnMsIG1pbl9kKTsgCgkJCX0KCQl9Cgl9CgoJLy8gTeG7nyBy4buZbmcgc2FuZyB0csOhaQoJaWYgKGwgLSAxID49IDEpIHsKCQlQb2ludCBueHQgPSBhW2wgLSAxXTsgCgkJbGwgbWluX2QgPSBhYnMoY3VyIC0gbnh0LnBvcykgKyBkcChsIC0gMSwgciwgMCk7IAoJCWlmIChueHQucG9zX3R5cGUgIT0gMikgewoJCQltaW5pbWl6ZShhbnMsIG1pbl9kKTsgCgkJfQoJCWVsc2UgewoJCQlpbnQgaGFtbWVyX2lkeCA9IHdoZXJlW254dC5vYmpfdHlwZV07IAoJCQlpZiAobCA8PSBoYW1tZXJfaWR4ICYmIGhhbW1lcl9pZHggPD0gcikgewoJCQkJbWluaW1pemUoYW5zLCBtaW5fZCk7IAoJCQl9CgkJfQoJfQoKCXJldHVybiBhbnM7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbiA+PiB4OyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IHlbaV07IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4geltpXTsgCgoJcHJlY29tcHV0ZSgpOyAgIAoKCW1lbXNldChtZW1vLCAtMSwgc2l6ZW9mIG1lbW8pOyAKCglsbCBhbnMgPSBkcChiZWcsIGJlZywgMCk7IAoJaWYgKGFucyA9PSBMSU5GKSBhbnMgPSAtMTsgCgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgIAp9