#include <bits/stdc++.h>
using namespace std;
double tstart[100100], vmax[100100], tf[100100];
double ds[100100], ts[100100], vs[100100];
double a, d, td, vd, dd;
int N, i, niv;
int main() {
  scanf("%d %lf %lf", &N, &a, &d);
  niv = 0;
  for (i = 1; i <= N; i++) {
    scanf("%lf %lf", &tstart[i], &vmax[i]);
    td = sqrt(2 * d / a);
    vd = a * td;
    if (vd > vmax[i]) {
      vd = vmax[i];
      td = vd / a;
    }
    dd = a * td * td / 2.0;
    td += tstart[i];
    while (niv > 0) {
      double li, ls, mid, tmeet = -1.0;
      li = max(tstart[i], ts[niv]);
      ls = tf[niv];
      if (niv > 1) ls = ts[niv - 1];
      while (li <= ls && fabs(ls - li) > 1e-8) {
        mid = 0.5 * (li + ls);
        double posi, posprev;
        if (mid <= td)
          posi = a * (mid - tstart[i]) * (mid - tstart[i]) / 2.0;
        else
          posi = dd + (mid - td) * vd;
        posprev = ds[niv] + (mid - ts[niv]) * vs[niv];
        if (posprev <= posi || fabs(posprev - posi) <= 1e-8) {
          tmeet = mid;
          ls = mid;
        } else
          li = mid;
      }
      if (tmeet < 0.5)
        niv--;
      else {
        ds[niv] += (tmeet - ts[niv]) * vs[niv];
        ts[niv] = tmeet;
        niv++;
        if (tmeet <= td) {
          ts[niv] = tmeet;
          vs[niv] = a * (tmeet - tstart[i]);
          ds[niv] = a * (tmeet - tstart[i]) * (tmeet - tstart[i]) / 2.0;
          tf[niv] = tf[niv - 1];
        } else {
          ts[niv] = td;
          vs[niv] = vd;
          tf[niv] = tf[niv - 1];
          ds[niv] = dd;
        }
        break;
      }
    }
    if (niv == 0) {
      niv = 1;
      ts[niv] = td;
      vs[niv] = vd;
      ds[niv] = dd;
      tf[niv] = ts[niv] + (d - ds[niv]) / vs[niv];
    }
    printf("%.6lf\n", tf[niv]);
  }
  return 0;
}
