#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
 
using tpl = tuple<int, int, int>;
typedef pair<int,int> pii;

void fastStream(){cin.tie(0);std::ios_base::sync_with_stdio(0);}

class UnionFindTree{
private:
    vector<int> par;
    vector<int> rank;
    vector<int> vals;
    int treeSize;
public:
    UnionFindTree(int initTreeSize = 1000){
        treeSize = initTreeSize;
        init();
    }
    void setVal(int pos,int val){
        vals[find(pos)]=val;
    }
    void init(){
        for(int i = 0; i < treeSize; i++){
            par.push_back(i);
            rank.push_back(0);
            vals.push_back(0);
        }
    }
    int getVal(int pos){
        return vals[find(pos)];
    }
    int find(int x){
        if(par[x] == x)return x;
        else return par[x] = find(par[x]);
    }
    void unite(int x,int y){
        x = find(x);
        y = find(y);
        // どちらかの親に値を割り当て
        if(vals[x]==0)vals[x]=vals[y];
        else if(vals[y]==0)vals[y]=vals[x];
        // 引き数の右の集合を代表する値を優先
        else vals[x]=vals[y];
        if(x == y)return;
        if(rank[x] < rank[y])par[x] = y;
        else{
            par[y] = x;
            if(rank[y] == rank[x])rank[x]++;
        }
    }
    bool same(int x,int y){
        return find(x) == find(y);
    }
};


int X;
int K;
int R[100010];
int Q;
int T[100010];
int A[100010];
int ans[100010];

int main(){

    fastStream();
    cin >> X;
    cin >> K;
    for(int i = 0; i < K; i++) cin >> R[i];
    cin >> Q;
    for(int i = 0; i < Q; i++) cin >> T[i] >> A[i];
    
    UnionFindTree uft(Q);
    set<pii> st;
    for(int i = 0; i < Q; i++){
        uft.setVal(i, A[i]);
        st.insert(pii(A[i], i));
    }
    
    
    // eventを管理
    vector<tpl> evs;
    for(int i = 0; i < K; i++)
        evs.push_back(tpl(R[i], 1, 0));
    for(int i = 0; i < Q; i++)
        evs.push_back(tpl(T[i], 0, i));


    sort(evs.begin(), evs.end());
    int p_time = 0; // 前の角度時刻
    int variation = 0; // 変化量
    int rev_cnt = 0; // ひっくり返した数
    for(tpl e : evs) {
        int q_type = get<1>(e);
        int elp_time = get<0>(e) - p_time;
        p_time = get<0>(e);
        // queryに答える
        if(q_type == 0){
            // 時間を進める
            int target_idx = get<2>(e);
            if(rev_cnt % 2 == 0){
                variation -= elp_time;
                ans[target_idx] = max(0, uft.getVal(target_idx) + variation);
            }
            else{
                variation += elp_time;
                ans[target_idx] = min(X, uft.getVal(target_idx) + variation);
            }
        }
        // 時間を進めて砂時計を裏返す
        else{
            if(rev_cnt % 2 == 0){
                variation -= elp_time;
                // 特定以下の要素はすべて削除する
                vector<pii> ers;
                auto it = st.upper_bound(pii(-variation, (1<<29)));
                while(it != st.begin()){
                    it--;
                    ers.push_back(*it);
                }
                for(pii p : ers){
                    st.erase(p);
                }

                // ersに入っている要素はすべてマージする
                for(int i = 0; i < (int)ers.size() - 1; i++){
                    pii e1 = ers[i];
                    pii e2 = ers[i + 1];
                    uft.unite(e1.second, e2.second);
                }

                // 値を再セット
                if(ers.size() > 0){
                    uft.setVal(uft.find(ers[0].second), -variation);
                    st.insert(pii(-variation, uft.find(ers[0].second)));
                }

            }
            else{
                variation += elp_time;
                // 特定以上の要素はすべて削除する
                vector<pii> ers;
                auto it = st.lower_bound(pii(X - variation, -(1<<29)));
                while(it != st.end()){
                    ers.push_back(*it);
                    it++;
                }
                for(pii p : ers){
                    st.erase(p);
                }

                // ersに入っている要素はすべてマージする
                for(int i = 0; i < (int)ers.size() - 1; i++){
                    pii e1 = ers[i];
                    pii e2 = ers[i + 1];
                    uft.unite(e1.second, e2.second);
                }

                // 値を再セット
                if(ers.size() > 0){
                    uft.setVal(uft.find(ers[0].second), X-variation);
                    st.insert(pii(X-variation, uft.find(ers[0].second)));
                }
            }
            rev_cnt++;
        }
    }
    for(int i = 0; i < Q; i++){
        cout << ans[i] << endl;
    }

    return 0;
}


Measured memory_bytes: 12260