rt
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int lnx=21;
const int maxn=100005;
const int INF=(int)(1e15);
int n,t,s,sa,sb,x,maxx,maxa,maxb;
int ga[maxn],gb[maxn];
int g[maxn][lnx][2],da[maxn][lnx][2],db[maxn][lnx][2],d[maxn][lnx][2];//0轮A,1轮B
struct city{
int h;
int pos,pre,nxt;
}a[maxn];
bool cmp1(city x,city y){
return x.h<y.h;
}
bool cmp2(city x,city y){
return x.pos<y.pos;
}
inline int read(){
int ret=0,f=1; char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){ret=ret*10+ch-'0';ch=getchar();}
return ret*f;
}
void scan(){
int k,j,i;
n=read();
for(k=1;k<=n;k++) a[k].h=read(),a[k].pos=k;
}
void calc(){
int k,j,i;
sort(a+1,a+n+1,cmp1);
for(k=1;k<=n;k++) a[k].pre=a[k-1].pos,a[k].nxt=a[k+1].pos;
sort(a+1,a+n+1,cmp2);
}
void del(int x){
a[a[x].pre].nxt=a[x].nxt;
a[a[x].nxt].pre=a[x].pre;
}
bool pd(int x){
return x==0||x==n+1;
}
int dist(int x,int y){
if(pd(y)) return INF;
return abs(a[x].h-a[y].h);
}
void prework1(){
int k,j,i;
calc();
for(k=1;k<=n;del(k),k++){
int pr =a[k ].pre,nx =a[k ].nxt;
int pre=a[pr].pre,nxt=a[nx].nxt;
if(dist(k,pr)>dist(k,nx)){
gb[k]=nx;
if(dist(k,pr)>dist(k,nxt)) ga[k]=nxt;
else ga[k]=pr;
}
else{
gb[k]=pr;
if(dist(k,pre)<dist(k,nx)) ga[k]=pre;
else ga[k]=nx;
}
}
}
void prework2(){
int k,j,i;
for(k=1;k<=n;k++)
g[k][0][0]=ga[k],da[k][0][0]=dist(k,ga[k]),
g[k][0][1]=gb[k],db[k][0][1]=dist(k,gb[k]);
for(k=1;k<lnx;k++){
da[0][k-1][0]=da[0][k-1][1]=db[0][k-1][0]=db[0][k-1][1]=INF;
da[n+1][k-1][0]=da[n+1][k-1][1]=db[n+1][k-1][0]=db[n+1][k-1][1]=INF;
for(j=1;j<=n;j++){
if(k==1){
g [j][k][0]=g [g [j][k-1][0]][k-1][1];
g [j][k][1]=g [g [j][k-1][1]][k-1][0];
da[j][k][0]=da[g [j][k-1][0]][k-1][1]+da[j][k-1][0];
da[j][k][1]=da[g [j][k-1][1]][k-1][0]+da[j][k-1][1];
db[j][k][0]=db[g [j][k-1][0]][k-1][1]+db[j][k-1][0];
db[j][k][1]=db[g [j][k-1][1]][k-1][0]+db[j][k-1][1];
}
else{
g [j][k][0]=g [g [j][k-1][0]][k-1][0];
g [j][k][1]=g [g [j][k-1][1]][k-1][1];
da[j][k][0]=da[g [j][k-1][0]][k-1][0]+da[j][k-1][0];
da[j][k][1]=da[g [j][k-1][1]][k-1][1]+da[j][k-1][1];
db[j][k][0]=db[g [j][k-1][0]][k-1][0]+db[j][k-1][0];
db[j][k][1]=db[g [j][k-1][1]][k-1][1]+db[j][k-1][1];
}
}
}
}
void find(int x){
int k,j,i;
sa=0; sb=0;
for(k=lnx-1;k>=0;k--)
if(da[x][k][0]+db[x][k][0]+sa+sb<=s){
// cout<<x<<" "<<sa<<" "<<sb<<endl;
sa+=da[x][k][0];
sb+=db[x][k][0];
x =g [x][k][0];
}
// cout<<x<<" "<<sa<<" "<<sb<<endl;
}
bool pd(){
if(!maxx) return 1;
if(!sa) return 0;
if(sa*maxb<sb*maxa) return 1;
if(sa*maxb>sb*maxa) return 0;
return a[x].h>a[maxx].h;
}
void solve1(){
int k,j,i;
s=read();
for(k=1;k<=n;k++){
x=k; find(x);
if(pd()){
maxx=k;
maxa=sa;
maxb=sb;
}
}
printf("%d\n",maxx);
}
void solve2(){
t=read();
while(t--){
x=read(); s=read();
find(x);
printf("%lld %lld\n",sa,sb);
}
}
signed main(){
int k,j,i;
scan(); prework1(); prework2(); solve1(); solve2();
return 0;
}