#include<bits/stdc++.h>
#define N 400010
#define int long long
using namespace std;
struct node{int id,h;}c[N];
int operator<(node a1,node a2) {return (a1.h==a2.h)?a1.id<a2.id:a1.h<a2.h;}
int d(int a1,int a2) {return a1-a2<0?a2-a1:a1-a2;}
int n,m,x0,f[N][22][2],db[N][22][2],da[N][22][2],t1,t2,t3,INF=1e16,his=-INF,ansid;
multiset<node> st;
set<node>::iterator IT,nxt,nxtt,pre,pree;
double bis=INF*1.0;
node solve(int id,int num) {
node ans;
ans.id=ans.h=0;
for(int i=20; i>=0; i--)
if(f[id][i][1]!=-1&&num-db[id][i][1]-da[id][i][1]>=0)
ans.id+=da[id][i][1],ans.h+=db[id][i][1],
num=num-db[id][i][1]-da[id][i][1],id=f[id][i][1];
return ans;
}
signed main()
{
// freopen("1081_8.in","r",stdin);
// freopen("output.txt","w",stdout);
cin>>n;
for(int i=1; i<=n; i++) {
cin>>c[i].h;
c[i].id=i;
}
st.insert(node{-1,INF}),st.insert(node{-1,INF});;
st.insert(node{-1,-INF}),st.insert(node{-1,-INF});
for(int i=n; i>=1; i--) {
st.insert(c[i]);
IT=st.lower_bound(c[i]),nxt=++IT,nxtt=++IT,--IT,--IT,pre=--IT,pree=--IT,++IT,++IT;
if((t1=d((*nxt).h,c[i].h))<(t3=d((*pre).h,c[i].h))) {
f[i][0][0]=(*nxt).id,db[i][0][0]=t1;
if((t2=d((*nxtt).h,c[i].h))<d((*pre).h,c[i].h))
f[i][0][1]=(*nxtt).id,da[i][0][1]=t2;
else f[i][0][1]=(*pre).id,da[i][0][1]=t3;
} else {
f[i][0][0]=(*pre).id,db[i][0][0]=t3;
if((t2=d((*pree).h,c[i].h))<d((*nxt).h,c[i].h))
f[i][0][1]=(*pree).id,da[i][0][1]=t2;
else f[i][0][1]=(*nxt).id,da[i][0][1]=t1;
}
if(f[i][0][0]==-1) db[i][0][0]=0;
if(f[i][0][1]==-1) da[i][0][1]=0;
}
for(int i=1; i<=n; i++)
f[i][1][1]=f[f[i][0][1]][0][0],
db[i][1][1]=db[f[i][0][1]][0][0],da[i][1][1]=da[i][0][1];
for(int k=2; k<21; k++)
for(int i=1; i<=n; i++)
f[i][k][1]=f[f[i][k-1][1]][k-1][1],
db[i][k][1]=db[i][k-1][1]+db[f[i][k-1][1]][k-1][1],
da[i][k][1]=da[i][k-1][1]+da[f[i][k-1][1]][k-1][1];
cin>>x0;
for(int i=1; i<=n; i++) {
node res=solve(i,x0);
double ns=(res.h?(double)res.id/(double)res.h:1.0*INF);
if(bis-ns>0) bis=ns,his=c[i].h,ansid=i;
else if(fabs(ns-bis)<1e-6&&c[i].h>his) his=c[i].h,ansid=i;
}
cout<<ansid<<endl;
cin>>m;
for(int i=1; i<=m; i++) {
int si,xi;
cin>>si>>xi;
node otpt=solve(si,xi);
cout<<otpt.id<<" "<<otpt.h<<endl;
}
return 0;
}