#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_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
// obj_type -> loại của búa/tường tại vị trí đấy
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í có trong bài
int beg, goal; // index của vị trí xuất phát (điểm có toạ độ 0), và vị trí kết thúc (điểm có toạ độ x)
int where[N]; // where[i] = index của 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 đ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 ở index l, hay index 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;
// Mở rộng sang phải
if (r + 1 <= m) {
Point nxt = a[r + 1];
if (nxt.pos_type != 2) { // Đi vào vị trí không có tường
minimize(ans, abs(cur - nxt.pos) + dp(l, r + 1, 1));
}
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, abs(cur - nxt.pos) + dp(l, r + 1, 1));
}
}
}
// Mở rộng sang trái
if (l - 1 >= 1) {
Point nxt = a[l - 1];
if (nxt.pos_type != 2) {
minimize(ans, abs(cur - nxt.pos) + dp(l - 1, r, 0));
}
else {
int hammer_idx = where[nxt.obj_type];
if (l <= hammer_idx && hammer_idx <= r) {
minimize(ans, abs(cur - nxt.pos) + dp(l - 1, r, 0));
}
}
}
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+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxNWUyICsgNTsgCmNvbnN0IGludCBNID0gM2UzICsgNTsgCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIG1pbmltaXplKFQmIGEsIGNvbnN0IFQmIGIpIHsKCWlmIChiIDwgYSkgYSA9IGI7IAp9CgovLyBwb3NfdHlwZSA9IDAgLT4gduG7iyB0csOtIHh14bqldCBwaMOhdAovLyBwb3NfdHlwZSA9IDEgLT4gduG7iyB0csOtIMSRw61jaAovLyBwb3NfdHlwZSA9IDIgLT4gduG7iyB0csOtIGPDsyB0xrDhu51uZwovLyBwb3NfdHlwZSA9IDMgLT4gduG7iyB0csOtIGPDsyBiw7phCi8vIG9ial90eXBlIC0+IGxv4bqhaSBj4bunYSBiw7phL3TGsOG7nW5nIHThuqFpIHbhu4sgdHLDrSDEkeG6pXkKc3RydWN0IFBvaW50IHsKCWludCBwb3MsIHBvc190eXBlLCBvYmpfdHlwZTsgCglib29sIG9wZXJhdG9yPChjb25zdCBQb2ludCYgb3RoZXIpIGNvbnN0IHsKCQlyZXR1cm4gcG9zIDwgb3RoZXIucG9zOwoJfQp9OwoKaW50IG4sIG0sIHg7CmludCB5W05dLCB6W05dOwoKUG9pbnQgYVtNXTsgLy8gbMawdSB04bqldCBj4bqjIGPDoWMgduG7iyB0csOtIGPDsyB0cm9uZyBiw6BpCmludCBiZWcsIGdvYWw7IC8vIGluZGV4IGPhu6dhIHbhu4sgdHLDrSB4deG6pXQgcGjDoXQgKMSRaeG7g20gY8OzIHRv4bqhIMSR4buZIDApLCB2w6AgduG7iyB0csOtIGvhur90IHRow7pjICjEkWnhu4NtIGPDsyB0b+G6oSDEkeG7mSB4KQppbnQgd2hlcmVbTl07IC8vIHdoZXJlW2ldID0gaW5kZXggY+G7p2EgYsO6YSBsb+G6oWkgaSAKCnZvaWQgcHJlY29tcHV0ZSgpIHsKCW0gPSAwOyAKCWFbKyttXSA9IHswLCAwLCAtMX07IAoJYVsrK21dID0ge3gsIDEsIC0xfTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgYVsrK21dID0ge3lbaV0sIDIsIGl9OyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgYVsrK21dID0ge3pbaV0sIDMsIGl9OyAKCglzb3J0KGEgKyAxLCBhICsgbSArIDEpOyAgIAoKCWZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewoJCWlmIChhW2ldLnBvc190eXBlID09IDApIGJlZyA9IGk7IAoJCWlmIChhW2ldLnBvc190eXBlID09IDEpIGdvYWwgPSBpOyAgCgkJaWYgKGFbaV0ucG9zX3R5cGUgPT0gMykgd2hlcmVbYVtpXS5vYmpfdHlwZV0gPSBpOyAKCX0KfQoKLy8gZHAobCwgciwgZW5kX3BvaW50KSA9IFF1w6NuZyDEkcaw4budbmcgbmfhuq9uIG5o4bqldCDEkWkgxJHhur9uIHbhu4sgdHLDrSDEkcOtY2gga2hpIHRhIMSRw6MgxJFpIHF1YSBjw6FjIHbhu4sgdHLDrSBjw7MgaW5kZXggbuG6sW0gdHJvbmcgxJFv4bqhbiBbbCwgcl0gCi8vICAgICAgICAgIGVuZF9wb2ludCAgPSAwLzE6IHRhIMSRYW5nIOG7nyBpbmRleCBsLCBoYXkgaW5kZXggcgpsbCBtZW1vW01dW01dWzJdOyAKCmxsIGRwKGludCBsLCBpbnQgciwgYm9vbCBlbmRfcG9pbnQpIHsKCWlmIChsID09IGdvYWwgfHwgciA9PSBnb2FsKSByZXR1cm4gMDsgCgkKCWxsJiBhbnMgPSBtZW1vW2xdW3JdW2VuZF9wb2ludF07IAoJaWYgKGFucyAhPSAtMSkgcmV0dXJuIGFuczsgIAoKCWFucyA9IExJTkY7IAoJaW50IGN1ciA9IChlbmRfcG9pbnQpID8gYVtyXS5wb3MgOiBhW2xdLnBvczsKCgkvLyBN4bufIHLhu5luZyBzYW5nIHBo4bqjaQoJaWYgKHIgKyAxIDw9IG0pIHsKCQlQb2ludCBueHQgPSBhW3IgKyAxXTsgCgoJCWlmIChueHQucG9zX3R5cGUgIT0gMikgeyAvLyDEkGkgdsOgbyB24buLIHRyw60ga2jDtG5nIGPDsyB0xrDhu51uZwoJCQltaW5pbWl6ZShhbnMsIGFicyhjdXIgLSBueHQucG9zKSArIGRwKGwsIHIgKyAxLCAxKSk7IAoJCX0KCQllbHNlIHsgLy8gxJBpIHbDoG8gduG7iyB0csOtIGPDsyB0xrDhu51uZwoJCQlpbnQgaGFtbWVyX2lkeCA9IHdoZXJlW254dC5vYmpfdHlwZV07CgkJCWlmIChsIDw9IGhhbW1lcl9pZHggJiYgaGFtbWVyX2lkeCA8PSByKSB7CgkJCQltaW5pbWl6ZShhbnMsIGFicyhjdXIgLSBueHQucG9zKSArIGRwKGwsIHIgKyAxLCAxKSk7IAoJCQl9CgkJfQoJfQoKCS8vIE3hu58gcuG7mW5nIHNhbmcgdHLDoWkKCWlmIChsIC0gMSA+PSAxKSB7CgkJUG9pbnQgbnh0ID0gYVtsIC0gMV07IAoKCQlpZiAobnh0LnBvc190eXBlICE9IDIpIHsKCQkJbWluaW1pemUoYW5zLCBhYnMoY3VyIC0gbnh0LnBvcykgKyBkcChsIC0gMSwgciwgMCkpOyAKCQl9CgkJZWxzZSB7CgkJCWludCBoYW1tZXJfaWR4ID0gd2hlcmVbbnh0Lm9ial90eXBlXTsgCgkJCWlmIChsIDw9IGhhbW1lcl9pZHggJiYgaGFtbWVyX2lkeCA8PSByKSB7CgkJCQltaW5pbWl6ZShhbnMsIGFicyhjdXIgLSBueHQucG9zKSArIGRwKGwgLSAxLCByLCAwKSk7IAoJCQl9CgkJfQoJfQoKCXJldHVybiBhbnM7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbiA+PiB4OyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IHlbaV07IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4geltpXTsgCgoJcHJlY29tcHV0ZSgpOyAgIAoKCW1lbXNldChtZW1vLCAtMSwgc2l6ZW9mIG1lbW8pOyAKCglsbCBhbnMgPSBkcChiZWcsIGJlZywgMCk7IAoJaWYgKGFucyA9PSBMSU5GKSBhbnMgPSAtMTsgCgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgIAp9