#include <bits/stdc++.h>
using namespace std; 
using ll = long long; 
const ll A = 1'000'000'000'000LL; 
void tleassert(bool b) {
    if (b) return; 
    ll c = 0; 
    for (int i = 0; i < 2043294832; ++i) {
        for (int j = 34; j < 43898943; ++j) {
            c += i; 
            c += 2 * i; 
            c %= j; 
        }
    }
    cout << c << '\n'; 
}
int32_t main() {
    ios_base::sync_with_stdio(false); 
    cin.tie(0); 
    int n, q; 
    cin >> n >> q; 
    ll d, ca, cb; 
    cin >> d >> ca >> cb; 
    vector<ll> v(2 * n + 2); 
    v[0] = 0; 
    v[2 * n + 1] = A; 
    for (int i = 1; i <= 2 * n; ++i) {
        cin >> v[i]; 
        if (i % 2) v[i]--; 
        else v[i]++; 
    }
    vector<pair<ll, ll>> segs; 
    for (int i = 0; i <= n; ++i) {
        segs.emplace_back(v[2 * i], v[2 * i + 1]); 
    }
    set<pair<ll, ll>> st;
    map<pair<ll, ll>, int> to; 
    int ind = 0; 
    st.insert(segs[0]); 
    to[segs[0]] = ind++; 
    for (int i = 1; i <= n; ++i) {
        ll yes = 2LL * A; 
        auto it = st.lower_bound({segs[i].first - d, 0}); 
        if (it != st.end()) {
            yes = min(yes, (*it).first + d); 
        }
        if (it != st.begin()) {
            it--; 
            if (segs[i].first - d <= (*it).second) {
                yes = min(yes, segs[i].first); 
            }
        }
        if (yes <= segs[i].second) {
            st.insert({yes, segs[i].second}); 
            to[{yes, segs[i].second}] = ind++; 
        }
    }
    segs.clear(); 
    for (auto [x, y]: st) segs.emplace_back(x, y); 
    auto can_reach = [&] (ll p) -> int {
        auto it = st.lower_bound({p + 1, -1});
        if (it != st.begin()) {
            it--; 
            auto [l, r] = *it; 
            return (l <= p && p <= r ? to[{l, r}] : -1); 
        }
        return -1; 
    }; 
    if (cb >= ca * d) {
        vector<ll> dp(ind, 1e9); 
        dp[0] = 0; 
        for (int i = 1; i < ind; ++i) {
            int lo = 0, hi = i - 1; 
            while (lo < hi) {
                int md = (lo + hi) / 2; 
                if (segs[i].first - d <= segs[md].second) {
                    hi = md; 
                } else {
                    lo = md + 1; 
                }
            }
            tleassert(segs[lo].first <= segs[i].first - d); 
            dp[i] = dp[lo + 1]; 
        }
        while (q--) {
            ll p; 
            cin >> p;   
            int i = can_reach(p); 
            if (i == -1) {
                cout << "-1\n"; 
            } else {
                cout << (dp[i] * cb + (p - d * dp[i]) * ca) << '\n'; 
            }
        }
    } else {
        assert(false); 
    }
}
Compilation message (stderr)
Main.cpp: In function 'void tleassert(bool)':
Main.cpp:14:20: warning: iteration 1073741824 invokes undefined behavior [-Waggressive-loop-optimizations]
   14 |             c += 2 * i;
      |                  ~~^~~
Main.cpp:11:23: note: within this loop
   11 |     for (int i = 0; i < 2043294832; ++i) {
      |                     ~~^~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |