有 n 个人和 k 把钥匙分布在一条直线上。每个人都想要到达位于同一条线上的办公室。为此,他需要先到某处获得一把钥匙,拿到钥匙后才能前往办公室。一把钥匙一旦被某个人拿走,其他人就不能再拿这把钥匙。
你的任务是确定让所有 n 个人都带着钥匙到达办公室所需的最短时间。假设每个人每秒能移动 1 单位距离。如果两个人同时到达一把钥匙,只能有一个人拿走钥匙。一个人可以从有钥匙的位置经过但不拿走钥匙。
第一行包含三个整数 n、k 和 p(1 \leq n \leq 1000,n \leq k \leq 2000,1 \leq p \leq 10^9),表示人数、钥匙数和办公室的位置。
第二行包含 n 个两两不同的整数 a_1,a_2,...,a_n(1 \leq a_i \leq 10^9),表示每个人的初始位置,顺序任意。
第三行包含 k 个两两不同的整数 b_1,b_2,...,b_k(1 \leq b_j \leq 10^9),表示每把钥匙的位置,顺序任意。
注意,同一个点上不会有多个人或多把钥匙,但某个人和钥匙可以处于同一个位置。
输出让所有 n 个人都带钥匙到达办公室所需的最短时间(单位:秒)。
2 4 50 20 100 60 10 40 80
50
1 2 10 11 15 7
7
在第一个样例中,位于 20 的人应选择拿 40 的钥匙,然后带着钥匙前往位于 50 的办公室,用时 30 秒。位于 100 的人可以拿 80 的钥匙再去办公室,用时 50 秒。因此,50 秒后所有人都到达了办公室并带着钥匙。
测试点1~6:n\leq k \leq 8;
测试点7~10:n=k且 leq 100;
测试点11~20:1 \leq n \leq 1000,n \leq k \leq 2000,1 \leq p \leq 10^9
| 时间限制 | 1 秒 |
| 内存限制 | 128 MB |