#include <bits/stdc++.h>
using namespace std;
const int maxn = 200050;
const double INF = 1e10;
struct point {
  double x, y;
  point(double x0 = 0, double y0 = 0) : x(x0), y(y0) {}
};
double l[maxn], r[maxn], sum[maxn];
point p[maxn];
void solve() {
  double x1, x2, y;
  scanf("%lf %lf %lf", &y, &x1, &x2);
  int n, q;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%lf %lf", &l[i], &r[i]);
  l[0] = 0;
  r[0] = 0;
  l[n + 1] = INF;
  r[n + 1] = INF;
  for (int i = 1; i <= n + 1; i++) sum[i] = sum[i - 1] + r[i] - l[i];
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    scanf("%lf %lf", &p[i].x, &p[i].y);
    double res = 0;
    double _l = p[i].x + (x1 - p[i].x) * p[i].y / (p[i].y - y);
    double _r = p[i].x + (x2 - p[i].x) * p[i].y / (p[i].y - y);
    int a = lower_bound(l, l + n + 2, _l) - l;
    int b = lower_bound(r, r + n + 2, _r) - r;
    if (_l >= l[a - 1] && _l <= r[a - 1]) {
      res -= sum[a - 1];
      res += r[a - 1] - _l;
    } else if (_l > r[a - 1]) {
      res -= sum[a - 1];
    }
    if (_r < l[b]) {
      res += sum[b - 1];
    } else if (_r >= l[b] && _r <= r[b]) {
      res += sum[b];
      res -= r[b] - _r;
    }
    printf("%.15f\n", res * (x2 - x1) / (_r - _l));
  }
}
int main() {
  solve();
  return 0;
}
