#include <bits/stdc++.h>
using namespace std;
int DEBUG = 0;
double Min(double a, double b) { return (a < b ? a : b); }
double Max(double a, double b) { return (a > b ? a : b); }
double Abs(double a) { return (a >= 0 ? a : -a); }
void print1d(int *vec, int M, const char *str = NULL) {
  if (str != NULL) printf("%s ", str);
  for (int i = 0; i < M; i++) {
    if (i > 0) printf(" ");
    printf("%d", vec[i]);
  }
  printf("\n");
}
struct NODE {
  double t, v;
};
int compare_NODE_inc(const void *a_, const void *b_) {
  NODE *a = (NODE *)a_;
  NODE *b = (NODE *)b_;
  if (a->t > b->t)
    return 1;
  else if (a->t < b->t)
    return -1;
  else
    return 0;
}
int main(int argc, char **argv) {
  DEBUG = (argc >= 2) ? atoi(argv[1]) : 0;
  int n;
  double a, d;
  cin >> n >> a >> d;
  NODE bus[n];
  for (int i = 0; i < n; i++) {
    cin >> bus[i].t >> bus[i].v;
  }
  qsort(bus, n, sizeof(NODE), compare_NODE_inc);
  double prevt = 0;
  double tim;
  for (int i = 0; i < n; i++) {
    double t = bus[i].t;
    double v = bus[i].v;
    if (v * v >= 2.0 * a * d) {
      tim = t + sqrt(2.0 * d / a);
    } else {
      tim = t + (1.0 * d / v + 1.0 * v / 2.0 / a);
    }
    prevt = Max(tim, prevt);
    printf("%.10f\n", prevt);
  }
  return 0;
}
