#include <bits/stdc++.h>
using namespace std;
double F[1002000 * 2];
int n;
double a, d;
inline void upd(int x, const double& t) {
  for (; x <= 1002000; x += ((x) & (-(x)))) F[x] = max(F[x], t);
}
inline double Max(int x) {
  double M = 0;
  for (; x; x -= ((x) & (-(x)))) M = max(F[x], M);
  return M;
}
struct Node {
  double V, t;
  int id, T;
  bool operator<(const Node& X) const { return T < X.T; }
} s[1002000];
inline bool cmp(Node a, Node b) { return a.id < b.id; }
int main() {
  scanf("%d%lf%lf", &n, &a, &d);
  for (int i = 0; i < n; ++i)
    scanf("%d%lf", &s[i].T, &s[i].V), s[i].id = i + 1, ++s[i].T;
  sort(s, s + n);
  for (int i = 0; i < n; ++i) {
    double t1 = s[i].V / a;
    double t;
    if (a * t1 * t1 / 2 > d)
      t = sqrt(2 * d / a);
    else
      t = t1 + (d - a * t1 * t1 / 2) / s[i].V;
    t += s[i].T;
    t = max(t, Max(s[i].T));
    s[i].t = t - 1;
    upd(s[i].T, t);
  }
  sort(s, s + n, cmp);
  for (int i = 0; i < n; ++i) printf("%.14f\n", s[i].t);
  return 0;
}
