#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 1e5;
const int INF = 1e9;
int N, M, K;
pii A[MAXN+10];
pii operator + (const pii &p, const pii &q) { return {min(p.first, q.first), max(p.second, q.second)}; }
struct SEG
{
pii tree[MAXN*4+10];
void init(int node, int tl, int tr)
{
if(tl==tr)
{
tree[node]={tl, tl};
return;
}
int mid=tl+tr>>1;
init(node*2, tl, mid);
init(node*2+1, mid+1, tr);
tree[node]={INF, -INF};
}
void update(int node, int tl, int tr, int l, int r, pii k)
{
if(r<tl || tr<l) return;
if(l<=tl && tr<=r)
{
tree[node]=tree[node]+k;
return;
}
int mid=tl+tr>>1;
update(node*2, tl, mid, l, r, k);
update(node*2+1, mid+1, tr, l, r, k);
}
void query(int node, int tl, int tr, pii t)
{
t.first=min(t.first, tree[node].first);
t.second=max(t.second, tree[node].second);
if(tl==tr)
{
A[tl]=t;
return;
}
int mid=tl+tr>>1;
query(node*2, tl, mid, t);
query(node*2+1, mid+1, tr, t);
}
}seg;
struct SEG2
{
pii tree[MAXN*4+10][30];
pii query(int node, int tl, int tr, int l, int r, int k)
{
if(l<=tl && tr<=r) return tree[node][k];
if(r<tl || tr<l) return {INF, -INF};
int mid=tl+tr>>1;
return query(node*2, tl, mid, l, r, k)+query(node*2+1, mid+1, tr, l, r, k);
}
void flush(int node, int tl, int tr, int k)
{
if(tl==tr)
{
tree[node][k]=A[tl];
return;
}
int mid=tl+tr>>1;
flush(node*2, tl, mid, k);
flush(node*2+1, mid+1, tr, k);
tree[node][k]=tree[node*2][k]+tree[node*2+1][k];
}
void init()
{
flush(1, 1, N, 0);
for(int i=1; i<=20; i++)
{
for(int j=1; j<=N; j++) A[j]=query(1, 1, N, A[j].first, A[j].second, i-1);
flush(1, 1, N, i);
}
}
}seg2;
int main()
{
scanf("%d%d%d", &N, &K, &M);
seg.init(1, 1, N);
for(int i=1; i<=M; i++)
{
int l, r;
scanf("%d%d", &l, &r);
if(l<r)
{
seg.update(1, 1, N, l, min(l+K-1, r-1), {INF, r});
}
else
{
seg.update(1, 1, N, max(l-K+1, r+1), l, {r, -INF});
}
}
seg.query(1, 1, N, {INF, -INF});
seg2.init();
scanf("%d", &M);
while(M--)
{
int s, e;
scanf("%d%d", &s, &e);
pii t=seg2.query(1, 1, N, s, s, 20);
if(t.first>e || t.second<e) { printf("-1\n"); continue; }
int ans=0, l=s, r=s;
for(int i=19; i>=0; i--)
{
pii t=seg2.query(1, 1, N, l, r, i);
if(t.first>e || t.second<e)
{
ans|=(1<<i);
l=t.first; r=t.second;
}
}
printf("%d\n", ans+1);
}
}