Problem:
Score : 700 points

Problem Statement

We have a sandglass consisting of two bulbs, bulb A and bulb B. These bulbs contain some amount of sand.
When we put the sandglass, either bulb A or B lies on top of the other and becomes the upper bulb. The other bulb becomes the lower bulb.

The sand drops from the upper bulb to the lower bulb at a rate of 1 gram per second.
When the upper bulb no longer contains any sand, nothing happens.

Initially at time 0, bulb A is the upper bulb and contains a grams of sand; bulb B contains X-a grams of sand (for a total of X grams).

We will turn over the sandglass at time r_1,r_2,..,r_K. Assume that this is an instantaneous action and takes no time. Here, time t refer to the time t seconds after time 0.

You are given Q queries.
Each query is in the form of (t_i,a_i).
For each query, assume that a=a_i and find the amount of sand that would be contained in bulb A at time t_i.

Constraints

1≤X≤10^9

1≤K≤10^5

1≤r_1<r_2< .. <r_K≤10^9

1≤Q≤10^5

0≤t_1<t_2< .. <t_Q≤10^9

0≤a_i≤X (1≤i≤Q)

All input values are integers.

Input

The input is given from Standard Input in the following format:

X
K
r_1 r_2 .. r_K
Q
t_1 a_1
t_2 a_2
:
t_Q a_Q

Output

For each query, print the answer in its own line.

Sample Input 1

180
3
60 120 180
3
30 90
61 1
180 180

Sample Output 1

60
1
120

In the first query, 30 out of the initial 90 grams of sand will drop from bulb A, resulting in 60 grams.
In the second query, the initial 1 gram of sand will drop from bulb A, and nothing will happen for the next 59 seconds. Then, we will turn over the sandglass, and 1 second after this, bulb A contains 1 gram of sand at the time in question.

Sample Input 2

100
1
100000
4
0 100
90 100
100 100
101 100

Sample Output 2

100
10
0
0

In every query, the upper bulb initially contains 100 grams, and the question in time comes before we turn over the sandglass.

Sample Input 3

100
5
48 141 231 314 425
7
0 19
50 98
143 30
231 55
342 0
365 100
600 10

Sample Output 3

19
52
91
10
58
42
100

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,n) FOR(i,0,n)
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second
template<typename A, typename B> inline bool chmax(A &a, B b) { if (a<b) { a=b; return 1; } return 0; }
template<typename A, typename B> inline bool chmin(A &a, B b) { if (a>b) { a=b; return 1; } return 0; }
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, pii> pip;
const ll INF = 1ll<<30;
const ll MOD = 1000000007;
const double EPS = 1e-10;
const bool debug = 0;
//------------------------------//

int X, K;
int R[112345];
int Q;
int t[112345], a[112345];
int ans[112345];

int main() {
	cin >> X >> K;
	
	R[0] = 0;
	REP(i, K) scanf("%d", R + i + 1);
	R[K + 1] = INF;
	
	cin >> Q;
	REP(i, Q) scanf("%d %d", t + i, a + i);
	
	int pos = 0;
	ll l = 0, lsum = 0, r = X, rsum = X, sum = 0;
	
	REP(i, K + 1) { // r_i-r_(i+1)[1-indexed]間
		int tmp;  
	
		while (pos < Q && R[i + 1] >= t[pos]) {
			tmp = t[pos] - R[i];
			if (i % 2 == 0) tmp = -tmp;
			
			ll res;
			if (l >= a[pos]) res = lsum + tmp;
			else if (r <= a[pos]) res = rsum + tmp;
			else res = a[pos] + sum + tmp;
			
			chmax(res, 0); chmin(res, X);
			ans[pos++] = res;
		}
		
		tmp = R[i + 1] - R[i];
		if (i % 2 == 0) tmp = -tmp;
		
		lsum += tmp;
		rsum += tmp;
		sum += tmp;
		
		if (lsum <= 0) {
			chmax(l, min<ll>(X, -lsum));
			lsum = 0;
		}
		
		if (rsum >= X) {
			chmin(r, max<ll>(0, X - (rsum - X)));
			rsum = X;
		}
		
		if (lsum >= X) lsum = X;
		if (rsum <= 0) rsum = 0;
	}
	
	REP(i, Q) printf("%d\n", ans[i]);
	
	return 0;
}