#include<bits/stdc++.h>

using namespace std;
template<class I>void gi(I&x){
	static char c;
	for(c=getchar();c<'0'||c>'9';c=getchar());
	for(x=0;c<='9'&&c>='0';c=getchar())x=x*10+(c&15);
}

const int N=500005;
typedef long long ll;
const double eps=1e-10;

struct node{
	double E,V;
	node(double e=0,double v=0){E=e,V=v;}
	double T(){return E/V;}
	inline node friend operator+(const node&a,const node&b){return node(a.E+b.E,a.V+b.V);}
	inline node to(double V){return node(T()*V,V);}
};
deque<node> Q;
double E,V;int n,L;
inline node pop_front(){node t=Q.front();Q.pop_front();E-=t.E;V-=t.V;return t;}
inline node pop_back(){node t=Q.back();Q.pop_back();E-=t.E;V-=t.V;return t;}
inline void push_front(node t){E+=t.E;V+=t.V;Q.push_front(t);}
inline void push_back(node t){E+=t.E;V+=t.V;Q.push_back(t);}
inline void print(){printf("%.10lf\n",E/V);}

inline void extend(int te,int vo){
	double K=L-vo;
	while(V>K+eps){
		node t=pop_back();
		if(V<K)push_back(t.to(K-V));
	}
	node x=node((ll)te*vo,vo);
	while(Q.size()){
		node t=pop_front();
		if(t.T()<x.T()){push_front(t);break;}
		x=x+t;
	}
	push_front(x);
}

int main(){
	gi(n),gi(L);
	for(int i=1,x,y;i<=n;i++)gi(x),gi(y),extend(x,y),print();
	return 0;
}