OI XXVIII - pla

// https://szkopul.edu.pl/problemset/problem/mSKiDD4jrokeNO__pazg6BaF/site/?key=statement

// Plażowicze

#include <bits/stdc++.h>

#define int long long

constexpr int sizik = 1000 * 1001;

#define ar std::array
#define pr std::pair
#define vec std::vector

typedef vec<vec<int>> _kra;

struct U {
    int liczebnik, mianownik, pos, liczebnosc;
    U(int l1, int m1, int p1, int l2) : liczebnik(l1), mianownik(m1), pos(p1), liczebnosc(l2) { ; }
};

#define s static_cast<__int128_t>

int compare(int a1, int b1, int a2, int b2) {
    if (b1 == 0 || b2 == 0) {
        throw std::invalid_argument("Denominator cannot be zero");
    }

    __int128_t left = s(a1) * s(b2);
    __int128_t right = s(a2) * s(b1);

    if (left > right) {
        return 1;
    } else if (left == right) {
        return 2;
    } else {
        return 3;
    }
}

struct cmp {
    bool operator()(const U& a, const U& b) const {
        int r = compare(a.liczebnik, a.mianownik, b.liczebnik, b.mianownik);
        if (r == 1) {
            return false;
        } else if (r == 2) {
            return a.pos > b.pos;
        } else if (r == 3) {
            return true;
        }
        throw std::invalid_argument("wtf");
    }
};

void divide(int& a, int& b, int c) {
    b *= c;
    int g = std::__gcd(a, b);
    a /= g;
    b /= g;
}
void multiply(int& a, int& b, int c) {
    a *= c;
    int g = std::__gcd(a, b);
    a /= g;
    b /= g;
}

std::pair<int, int> sum(int a1, int b1, int a2, int b2) {
    int numerator = a1 * b2 + a2 * b1;
    int denominator = b1 * b2;

    int gcd_value = std::__gcd(numerator, denominator);
    numerator /= gcd_value;
    denominator /= gcd_value;

    return {numerator, denominator};
}

void solve() {
    int n, X, z;
    std::cin >> n >> X >> z;

    std::vector<int> v(n);
    for (auto& a : v) {
        std::cin >> a;
    }

    std::priority_queue<U, vec<U>, cmp> q;
    for (int i = 1; i < v.size(); i++) {
        q.push({v[i] - v[i - 1], 1ll, v[i - 1], 0ll});
    }

    std::vector<std::pair<int, int>> pp(z);
    int idx = 0;
    for (auto& [a, j] : pp) {
        std::cin >> a;
        j = idx++;
    }
    std::sort(pp.begin(), pp.end());

    std::vector<std::pair<int, int>> ans(z);

    int akt = 0;
    idx = 0;
    while (idx < z) {
        const auto [curr, local_idx] = pp[idx];
        auto t = q.top();

        if (akt < curr && curr <= akt + (1 << t.liczebnosc)) {
            int x = t.liczebnik * (1 + 2 * (curr - akt - 1)) + t.pos * 2 * t.mianownik;
            int y = 2 * t.mianownik;
            int g = std::__gcd(x, y);
            x /= g;
            y /= g;

            ans[local_idx] = {x, y};
            idx++;
        } else {
            akt += (1 << t.liczebnosc);
            q.pop();
            divide(t.liczebnik, t.mianownik, 2);
            t.liczebnosc++;
            q.push(t);
        }
    }

    for (const auto& [x, y] : ans) {
        std::cout << x << "/" << y << '\n';
    }
}

int32_t main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}