#include<bits/stdc++.h>

#ifdef THEMIS
#include "testlib_themis.h"
const std::string TASK_NAME = "DISTANCE"; // Tên bài
#else
#include "testlib.h"
#endif // THEMIS

using namespace std;

// Hàm tính giá trị tuyệt đối cho số nguyên 64-bit
long long my_abs(long long a) {
    return (a < 0) ? -a : a;
}

void check() {
    // --- Đọc dữ liệu đầu vào (Input) ---
    int n = inf.readInt(); // Số phần tử nguồn
    int m = inf.readInt(); // Số phần tử đích cần tìm

    vector<long long> S(n);
    for (int i = 0; i < n; i++) {
        S[i] = inf.readLong();
    }
    // Sắp xếp mảng nguồn để sử dụng tìm kiếm nhị phân (lower_bound)
    sort(S.begin(), S.end());

    // --- Đọc kết quả của thí sinh (User Output) ---
    long long user_total_dist = ouf.readLong(); // Dòng 1: Tổng khoảng cách
    vector<long long> T;
    // Đọc m toạ độ trên dòng thứ 2 (hoặc các dòng tiếp theo tuỳ định dạng whitespace)
    for (int i = 0; i < m; i++) {
        T.push_back(ouf.readLong());
    }

    // --- Kiểm tra tính hợp lệ của tập T ---

    // 1. Kiểm tra các phần tử trong T có phân biệt hay không (đôi một khác nhau)
    vector<long long> sorted_T = T;
    sort(sorted_T.begin(), sorted_T.end());
    for (int i = 0; i < m - 1; i++) {
        if (sorted_T[i] == sorted_T[i+1]) {
            quitf(_wa, "Tap dich T chua phan tu trung nhau: %lld", sorted_T[i]);
        }
    }

    // 2. Tính toán lại tổng khoảng cách và kiểm tra T giao S
    long long calculated_dist = 0;

    for (long long val : T) {
        // Kiểm tra toạ độ nằm trong giới hạn cho phép (nếu cần thiết theo đề)
        // Đề bài: -2*10^9 <= y <= 2*10^9. Testlib tự check format số, ta check logic.

        // Kiểm tra val có thuộc S không (S giao T = rỗng)
        if (binary_search(S.begin(), S.end(), val)) {
            quitf(_wa, "Phan tu %lld thuoc tap nguon S (vi pham dieu kien S giao T = rong)", val);
        }

        // Tìm phần tử trong S gần val nhất
        auto it = lower_bound(S.begin(), S.end(), val);
        long long d = -1;

        if (it == S.begin()) {
            // val nhỏ hơn tất cả phần tử trong S -> gần S[0] nhất
            d = my_abs(*it - val);
        } else if (it == S.end()) {
            // val lớn hơn tất cả phần tử trong S -> gần S[n-1] nhất
            d = my_abs(*prev(it) - val);
        } else {
            // val nằm giữa *prev(it) và *it
            long long d1 = my_abs(*it - val);
            long long d2 = my_abs(*prev(it) - val);
            d = min(d1, d2);
        }
        calculated_dist += d;
    }

    // 3. So sánh tổng thí sinh in ra và tổng thực tế tính từ tập T
    if (calculated_dist != user_total_dist) {
        quitf(_wa, "Tong khoang cach in ra (%lld) khong khop voi tong tinh lai tu tap T (%lld)", user_total_dist, calculated_dist);
    }

    // --- Đọc kết quả của giám khảo (Jury Answer) ---
    long long ans_total_dist = ans.readLong();
    // Chúng ta không cần kiểm tra tập T của giám khảo, chỉ cần so sánh giá trị tối ưu F.

    // --- So sánh và chấm điểm ---
    if (user_total_dist > ans_total_dist) {
        quitf(_wa, "Ket qua khong toi uu. Thi sinh: %lld, Dap an: %lld", user_total_dist, ans_total_dist);
    } else if (user_total_dist < ans_total_dist) {
        // Trường hợp này hiếm khi xảy ra nếu đáp án chuẩn đúng, nhưng vẫn cần check
        quitf(_fail, "Thi sinh tim duoc ket qua tot hon Dap an! (TS: %lld < DA: %lld)", user_total_dist, ans_total_dist);
    } else {
        quitf(_ok, "Chinh xac! Tong khoang cach: %lld", user_total_dist);
    }
}

int main(int argc, char *argv[]) {
#ifdef THEMIS
    registerTestlibThemis(TASK_NAME + ".inp", TASK_NAME + ".out");
#else
    registerTestlibCmd(argc, argv);
#endif
    check();
    return 0;
}
