#include <bits/stdc++.h>   using namespace std;   int n, m, Q;   double sy, l[200100], r[200100], sum[200100], zl, zr, x, y, ans;   struct Node {     double x, y;   } bj[2][200100], tmp, L, R;   inline bool lef(Node u, Node v, Node w) {     if (u.x == v.x) return w.x < u.x;     double t;     t = v.x - (v.x - u.x) * (v.y - w.y) / (v.y - u.y);     return w.x < t;   }   inline double ask(int u) {     double p, q;     if (bj[0][u].x == x)       p = x;     else {       p = x - (x - bj[0][u].x) * (y - sy) / y;     }     if (bj[1][u].x == x)       q = x;     else {       q = x - (x - bj[1][u].x) * (y - sy) / y;     }     return max((double)0, min(q, zr) - max(p, zl));   }   int main() {     int i, j, p, q, mid, a, b;     cin >> sy >> zl >> zr >> n;     L.y = R.y = sy, L.x = zl, R.x = zr;     for (i = 1; i <= n; i++) {       scanf( %lf%lf , &l[i], &r[i]);       sum[i] = sum[i - 1] + r[i] - l[i];       bj[0][i].y = 0, bj[0][i].x = l[i];       bj[1][i].y = 0, bj[1][i].x = r[i];     }     cin >> m;     for (i = 1; i <= m; i++) {       scanf( %lf%lf , &x, &y);       ans = 0;       tmp.x = x, tmp.y = y;       for (p = 1, q = n; p < q;) {         mid = ((p + q) >> 1);         if (lef(tmp, bj[0][mid], L))           q = mid;         else           p = mid + 1;       }       a = p - 1;       for (p = 1, q = n; p < q;) {         mid = ((p + q) >> 1);         if (!lef(tmp, bj[1][mid], R))           p = mid + 1;         else           q = mid;       }       b = p;       printf( %.10f n , ask(a) + ask(b) * (a != b) +                             max((double)0, sum[b - 1] - sum[a]) * (y - sy) / y);     }   }   