#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
#include <iterator>
using namespace std;
const int N = 100007;
struct City
{
int n, h;
friend bool operator < (const City& a, const City& b) {return a.h < b.h;}
} c[N];
set<City> s;
set<City>::iterator I;
int h[N], f1[N], f2[N];
struct Data
{
int d;
long long a, b, x;
Data() {d = a = b = x = 0;}
} f[N][18];
template <typename T> inline T Abs(T x) {return x < 0 ? -x : x;}
inline int Dist(int a, int b) {return Abs(h[a] - h[b]);}
inline int Dist(set<City>::iterator A, set<City>::iterator B) {return Abs(A -> h - B -> h);}
inline int Dist(int a, set<City>::iterator I) {return Abs(h[a] - I -> h);}
void Special_Work()
{
int i;
scanf("%*d%*d");
cout << 1 << endl;
cin >> i;
while (i--) printf("0 0\n");
}
inline void Update(int i, int j)
{
if (f1[i] == -1 || Dist(i, j) < Dist(i, f1[i]) ||
(Dist(i, j) == Dist(i, f1[i]) && h[j] < h[f1[i]])) {f2[i] = f1[i]; f1[i] = j;}
else if (f2[i] == -1 || Dist(i, j) < Dist(i, f2[i]) ||
(Dist(i, j) == Dist(i, f2[i]) && h[j] < h[f2[i]])) f2[i] = j;
}
inline void Update(int i, set<City>::iterator I)
{
if (f1[i] == -1 || Dist(i, I) < Dist(i, f1[i]) ||
(Dist(i, I) == Dist(i, f1[i]) && I -> h < h[f1[i]])) {f2[i] = f1[i]; f1[i] = I -> n;}
else if (f2[i] == -1 || Dist(i, I) < Dist(i, f2[i]) ||
(Dist(i, I) == Dist(i, f2[i]) && I -> h < h[f2[i]])) f2[i] = I -> n;
}
int main()
{
int n, m, x0, i, j, k, x, s0 = 0;
long long a, b, A = 0, B = 0;
cin >> n;
if (n == 1) {Special_Work(); return 0;}
for (i = 1; i <= n; ++i) {scanf("%d", &h[i]); c[i].h = h[i]; c[i].n = i;}
s.insert(c[n]);
f1[n - 1] = n; s.insert(c[n - 1]);
if (n <= 4)
for (i = n - 2; i > 0; --i)
{
f1[i] = f2[i] = -1;
for (j = i + 1; j <= n; ++j) Update(i, j);
}
else {
s.insert(c[n - 2]); s.insert(c[n - 3]);
for (i = n - 2; i > n - 4; --i)
{
f1[i] = f2[i] = -1;
for (j = i + 1; j <= n; ++j) Update(i, j);
}
for (i = n - 4; i > 0; --i)
{
f1[i] = f2[i] = -1;
s.insert(c[i]);
I = s.find(c[i]);
if ((++I) != s.end())
{
Update(i, I);
if ((++I) != s.end()) {Update(i, I); --I;}
--I;
}
if (I != s.begin())
{
Update(i, --I);
if (I != s.begin()) Update(i, --I);
}
}
}
for (i = n - 2; i > 0; --i)
{
f[i][0].d = f1[f2[i]];
f[i][0].x = Dist(f1[f2[i]], f2[i]) + Dist(f2[i], i);
f[i][0].b = Dist(f1[f2[i]], f2[i]);
f[i][0].a = Dist(f2[i], i);
}
for (j = 1; (1 << j) < n; ++j)
for (i = 1; i + (1 << j) <= n; ++i)
{
if (!(f[i][j].d = f[f[i][j - 1].d][j - 1].d)) continue;
f[i][j].a = f[f[i][j - 1].d][j - 1].a + f[i][j - 1].a;
f[i][j].b = f[f[i][j - 1].d][j - 1].b + f[i][j - 1].b;
f[i][j].x = f[f[i][j - 1].d][j - 1].x + f[i][j - 1].x;
}
cin >> x0;
for (i = n; i > 0; --i)
{
x = a = b = 0;
k = i;
for (j = 17; j >= 0; --j)
if (f[k][j].d && x + f[k][j].x <= x0)
{a += f[k][j].a; b += f[k][j].b; x += f[k][j].x; k = f[k][j].d;}
if (f2[k] && x + Dist(k, f2[k]) <= x0) {a += Dist(k, f2[k]); x += Dist(k, f2[k]);}
if (!s0 || (b && !B) || a * B < b * A || (a * B == b * A && h[i] > h[s0])) {A = a; B = b; s0 = i;}
}
cout << s0 << endl;
cin >> m;
while (m--)
{
scanf("%d%d", &k, &x0);
x = a = b = 0;
for (j = 17; j >= 0; --j)
if (f[k][j].d && x + f[k][j].x <= x0)
{a += f[k][j].a; b += f[k][j].b; x += f[k][j].x; k = f[k][j].d;}
if (f2[k] && x + Dist(k, f2[k]) <= x0) {a += Dist(k, f2[k]); x += Dist(k, f2[k]);}
printf("%lld %lld\n", a, b);
}
return 0;
}
/**************************************************************
Problem: 2316
User: admin
Language: C++
Result: Accepted
Time:2713 ms
Memory:65040 kb
****************************************************************/