#include<map>
#include<set>
#include<stack>
#include<cmath>
#include<ctime>
#include<vector>
#include<string>
#include<bitset>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<complex>
#include<iostream>
#include<algorithm>
using namespace std;
int times;
const double inf=1e12,eps=1e-11,pi=acos(-1.);
double ans;
struct ss
{
double nowt,nowd,bt;
int id,pa;
bool operator <(const ss &temp)const
{
return nowt<temp.nowt-eps;
}
};
set<ss>sta[5];
set<ss>::iterator it;
ss now,list[100000],ls[100000];
int cnt_list,ch,cnt_ls;
struct qq
{
int id;
double w;
bool operator <(const qq &temp)const
{
return w<temp.w;
}
};
struct point
{
double a,b,d;
};
point pt[5];
struct pp
{
int id;
double bt;
};
pp stk[100001],ans_list[100001];
int n,num_ans;
double d,c;
double compute(int id,double nowt,double nowd)
{
int i,j,s,p,q,it;
double C=0-(pt[id].b*nowt-pt[id].a*cos(nowt+pt[id].d));
double low,high,mid;
low=nowt;
high=((d-nowd-C)+pt[id].a)/pt[id].b;
for(it=0;it<=30;it++)
{
mid=0.5*(low+high);
if(pt[id].b*mid-pt[id].a*cos(mid+pt[id].d)+C<=d-nowd)
low=mid;
else
high=mid;
}
return 0.5*(low+high);
}
int main()
{
scanf("%d%lf%lf",&n,&d,&c);
int i,j,s,p,q;
for(i=0;i<n;i++)
{
scanf("%lf%lf%lf",&pt[i].a,&pt[i].b,&pt[i].d);
sta[i].clear();
}
now.nowd=0;
now.nowt=0;
now.bt=0;
now.id=0;
sta[0].insert(now);
double nowt,nowd;
ans=inf;
cnt_list=0;
while(true)
{
double in=inf;
int id;
for(i=0;i<n;i++)
{
if(sta[i].size()>0)
{
it=sta[i].begin();
if(in>it->nowt)
{
id=i;
in=it->nowt;
}
}
}
if(in==inf)
break;
it=sta[id].begin();
list[cnt_list++]=*it;
nowt=it->nowt;
nowd=it->nowd;
sta[id].erase(*it);
double vl=compute(id,nowt,nowd);
if(ans>vl)
{
ch=cnt_list-1;
ans=vl;
}
if(it->nowt>ans)
break;
int kmin,k;
for(s=0;s<n;s++)
{
i=id;
j=s;
if(j==i)
continue;
double A,B,alpha,aa,bb,nt,nd;
A=pt[i].b-pt[j].b;
aa=pt[i].a*cos(pt[i].d)-pt[j].a*cos(c*abs(i-j)+pt[j].d);
bb=pt[i].a*sin(pt[i].d)-pt[j].a*sin(c*abs(i-j)+pt[j].d);
B=sqrt(aa*aa+bb*bb);
alpha=atan2(aa,bb);
if(aa==0&&bb==0&&A>=eps)
continue;
double vv=-A/B;
if(vv<-1)
vv=-1;
if(vv>1)
vv=1;
vv=acos(vv);
kmin=(int)((nowt-alpha-vv)/(2*pi));
while(2*pi*kmin+vv<nowt-alpha-eps)
kmin++;
for(k=kmin-1;k<=kmin+25;k++)
{
nt=2*k*pi+vv+alpha+c*abs(i-j);
if(k==kmin-1&&pt[i].b+pt[i].a*sin(nowt+pt[i].d)<pt[j].b+pt[j].a*sin(nowt+c*abs(i-j)+pt[j].d))
nt=nowt+c*abs(i-j);
else if(k==kmin-1)
continue;
nd=nowd+pt[i].b*(nt-c*abs(i-j)-nowt)-pt[i].a*cos(nt-c*abs(i-j)+pt[i].d)+pt[i].a*cos(nowt+pt[i].d);
if(nd>=d||nt>=ans)
break;
if(nd<=d)
{
now.nowd=nd;
now.nowt=nt;
now.bt=nt-c*abs(i-j);
now.pa=cnt_list-1;
now.id=j;
if(now.nowt<ans-eps)
{
double lt,rt,ld,rd,bd;
cnt_ls=0;
for(it=sta[j].lower_bound(now);it!=sta[j].end();it++)
{
lt=now.nowt;
ld=now.nowd;
rt=it->nowt;
rd=it->nowd;
bd=pt[j].b*(rt-lt)-pt[j].a*cos(rt+pt[j].d)+pt[j].a*cos(lt+pt[j].d);
if(ld+bd>=rd-eps)
ls[cnt_ls++]=*it;
else
break;
}
for(q=0;q<cnt_ls;q++)
sta[j].erase(ls[q]);
it=sta[j].find(now);
if(it!=sta[j].end())
break;
sta[j].insert(now);
}
}
}
}
}
printf("%.20f\n",ans);
num_ans=0;
while(ch!=0)
{
ans_list[num_ans].id=list[ch].id;
ans_list[num_ans++].bt=list[ch].bt;
ch=list[ch].pa;
}
printf("%d\n",num_ans);
for(i=num_ans-1;i>=0;i--)
printf("%d %.20f\n",ans_list[i].id+1,ans_list[i].bt);
return 0;
}
I2luY2x1ZGU8bWFwPiAgCiNpbmNsdWRlPHNldD4gIAojaW5jbHVkZTxzdGFjaz4gIAojaW5jbHVkZTxjbWF0aD4gIAojaW5jbHVkZTxjdGltZT4gIAojaW5jbHVkZTx2ZWN0b3I+ICAKI2luY2x1ZGU8c3RyaW5nPiAgCiNpbmNsdWRlPGJpdHNldD4gIAojaW5jbHVkZTxjc3RkaW8+ICAKI2luY2x1ZGU8Y3N0ZGxpYj4gIAojaW5jbHVkZTxjc3RyaW5nPiAgCiNpbmNsdWRlPGNsaW1pdHM+ICAKI2luY2x1ZGU8Y29tcGxleD4gIAojaW5jbHVkZTxpb3N0cmVhbT4gIAojaW5jbHVkZTxhbGdvcml0aG0+ICAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IHRpbWVzOwpjb25zdCBkb3VibGUgaW5mPTFlMTIsZXBzPTFlLTExLHBpPWFjb3MoLTEuKTsKZG91YmxlIGFuczsKc3RydWN0IHNzCnsKCWRvdWJsZSBub3d0LG5vd2QsYnQ7CglpbnQgaWQscGE7Cglib29sIG9wZXJhdG9yIDwoY29uc3Qgc3MgJnRlbXApY29uc3QKCXsKICAgICAgICByZXR1cm4gbm93dDx0ZW1wLm5vd3QtZXBzOwoJfQp9OwpzZXQ8c3M+c3RhWzVdOwpzZXQ8c3M+OjppdGVyYXRvciBpdDsKc3Mgbm93LGxpc3RbMTAwMDAwXSxsc1sxMDAwMDBdOwppbnQgY250X2xpc3QsY2gsY250X2xzOwpzdHJ1Y3QgcXEKewoJaW50IGlkOwoJZG91YmxlIHc7Cglib29sIG9wZXJhdG9yIDwoY29uc3QgcXEgJnRlbXApY29uc3QKCXsKCQlyZXR1cm4gdzx0ZW1wLnc7Cgl9Cn07CnN0cnVjdCBwb2ludAp7Cglkb3VibGUgYSxiLGQ7Cn07CnBvaW50IHB0WzVdOwpzdHJ1Y3QgcHAKewoJaW50IGlkOwoJZG91YmxlIGJ0Owp9OwpwcCBzdGtbMTAwMDAxXSxhbnNfbGlzdFsxMDAwMDFdOwppbnQgbixudW1fYW5zOwpkb3VibGUgZCxjOwpkb3VibGUgY29tcHV0ZShpbnQgaWQsZG91YmxlIG5vd3QsZG91YmxlIG5vd2QpCnsKCWludCBpLGoscyxwLHEsaXQ7Cglkb3VibGUgQz0wLShwdFtpZF0uYipub3d0LXB0W2lkXS5hKmNvcyhub3d0K3B0W2lkXS5kKSk7Cglkb3VibGUgbG93LGhpZ2gsbWlkOwoJbG93PW5vd3Q7CgloaWdoPSgoZC1ub3dkLUMpK3B0W2lkXS5hKS9wdFtpZF0uYjsKICAgCWZvcihpdD0wO2l0PD0zMDtpdCsrKQogICAgewogICAgICAgCW1pZD0wLjUqKGxvdytoaWdoKTsKICAgICAgIAlpZihwdFtpZF0uYiptaWQtcHRbaWRdLmEqY29zKG1pZCtwdFtpZF0uZCkrQzw9ZC1ub3dkKQogICAgICAgCSAgICAgbG93PW1pZDsKICAgCSAgICBlbHNlCiAgIAkgICAgICAgIGhpZ2g9bWlkOwogICAgfQogICAgcmV0dXJuIDAuNSoobG93K2hpZ2gpOwp9CmludCBtYWluKCkKewoJc2NhbmYoIiVkJWxmJWxmIiwmbiwmZCwmYyk7CglpbnQgaSxqLHMscCxxOwoJZm9yKGk9MDtpPG47aSsrKQoJewoJCXNjYW5mKCIlbGYlbGYlbGYiLCZwdFtpXS5hLCZwdFtpXS5iLCZwdFtpXS5kKTsKCSAgICBzdGFbaV0uY2xlYXIoKTsKCX0KCW5vdy5ub3dkPTA7Cglub3cubm93dD0wOwoJbm93LmJ0PTA7CiAgICBub3cuaWQ9MDsKCXN0YVswXS5pbnNlcnQobm93KTsKCWRvdWJsZSBub3d0LG5vd2Q7CglhbnM9aW5mOwoJY250X2xpc3Q9MDsKCXdoaWxlKHRydWUpCgl7CgkJZG91YmxlIGluPWluZjsKCQlpbnQgaWQ7CgkJZm9yKGk9MDtpPG47aSsrKQoJCXsKCQkJaWYoc3RhW2ldLnNpemUoKT4wKQoJCQl7CgkJCQlpdD1zdGFbaV0uYmVnaW4oKTsKCQkJCWlmKGluPml0LT5ub3d0KQoJCQkJewoJCQkJICAgIGlkPWk7CgkJCQkgICAgaW49aXQtPm5vd3Q7CgkJCQl9CgkJCX0KCQl9CgkJaWYoaW49PWluZikKCQkgICAgYnJlYWs7IAoJCWl0PXN0YVtpZF0uYmVnaW4oKTsKCQlsaXN0W2NudF9saXN0KytdPSppdDsKCQlub3d0PWl0LT5ub3d0OwoJCW5vd2Q9aXQtPm5vd2Q7CgkJc3RhW2lkXS5lcmFzZSgqaXQpOwoJCWRvdWJsZSB2bD1jb21wdXRlKGlkLG5vd3Qsbm93ZCk7CgkJaWYoYW5zPnZsKQoJCXsKCQkJY2g9Y250X2xpc3QtMTsKCQkgICAgYW5zPXZsOwoJCX0KCQlpZihpdC0+bm93dD5hbnMpCiAgICAgICAgICAgYnJlYWs7CgkJaW50IGttaW4sazsKICAgCSAgICBmb3Iocz0wO3M8bjtzKyspCiAgICAgICAgewogICAgICAgIAlpPWlkOwogICAgICAgICAgICBqPXM7CiAgICAgICAgICAgIGlmKGo9PWkpCiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAJICAgIGRvdWJsZSBBLEIsYWxwaGEsYWEsYmIsbnQsbmQ7CgkgICAgIAlBPXB0W2ldLmItcHRbal0uYjsKCSAgICAgICAgYWE9cHRbaV0uYSpjb3MocHRbaV0uZCktcHRbal0uYSpjb3MoYyphYnMoaS1qKStwdFtqXS5kKTsKCSAgICAgICAgYmI9cHRbaV0uYSpzaW4ocHRbaV0uZCktcHRbal0uYSpzaW4oYyphYnMoaS1qKStwdFtqXS5kKTsKCSAgICAgICAgQj1zcXJ0KGFhKmFhK2JiKmJiKTsKCSAgICAgICAgYWxwaGE9YXRhbjIoYWEsYmIpOwoJICAgICAgICBpZihhYT09MCYmYmI9PTAmJkE+PWVwcykKCSAgICAgICAgICAgIGNvbnRpbnVlOwoJCSAgICAJZG91YmxlIHZ2PS1BL0I7CiAgICAgICAgICAgICAgICBpZih2djwtMSkKICAgICAgICAgICAgICAgICAgIHZ2PS0xOwogICAgICAgICAgICAgICAgaWYodnY+MSkKICAgICAgICAgICAgICAgICAgIHZ2PTE7CiAgICAgICAgICAgICAgICB2dj1hY29zKHZ2KTsKICAgICAgICAgICAgICAgIGttaW49KGludCkoKG5vd3QtYWxwaGEtdnYpLygyKnBpKSk7CiAgICAgICAgICAgICAgICB3aGlsZSgyKnBpKmttaW4rdnY8bm93dC1hbHBoYS1lcHMpCiAgICAgICAgICAgICAgICAgICBrbWluKys7IAogICAgICAgIAkgICAgZm9yKGs9a21pbi0xO2s8PWttaW4rMjU7aysrKQogICAgICAgICAgIAkgICAgewoJCQkgICAgICAgIG50PTIqaypwaSt2dithbHBoYStjKmFicyhpLWopOwoJCSAgICAgICAgCWlmKGs9PWttaW4tMSYmcHRbaV0uYitwdFtpXS5hKnNpbihub3d0K3B0W2ldLmQpPHB0W2pdLmIrcHRbal0uYSpzaW4obm93dCtjKmFicyhpLWopK3B0W2pdLmQpKQoJCSAgICAJICAgICAgICBudD1ub3d0K2MqYWJzKGktaik7CgkJCSAgICAJZWxzZSBpZihrPT1rbWluLTEpCgkJCSAgICAJICAgIGNvbnRpbnVlOwoJCQkJCW5kPW5vd2QrcHRbaV0uYioobnQtYyphYnMoaS1qKS1ub3d0KS1wdFtpXS5hKmNvcyhudC1jKmFicyhpLWopK3B0W2ldLmQpK3B0W2ldLmEqY29zKG5vd3QrcHRbaV0uZCk7CiAgICAgICAgICAgICAgICAgICAgaWYobmQ+PWR8fG50Pj1hbnMpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoJCQkJICAgIGlmKG5kPD1kKQogICAgICAgICAgICAgICAgICAgIHsKCQkgICAgICAgICAgICAgICAgbm93Lm5vd2Q9bmQ7CgkJICAgICAgICAgICAgICAgIG5vdy5ub3d0PW50OyAKCQkgICAgICAgICAgICAgICAgbm93LmJ0PW50LWMqYWJzKGktaik7CgkJICAgICAgICAgICAgICAgIG5vdy5wYT1jbnRfbGlzdC0xOwogIAkJICAgICAgICAgICAgICAgIG5vdy5pZD1qOwogICAgICAgICAgICAgICAgICAgICAgICBpZihub3cubm93dDxhbnMtZXBzKQogICAgICAgICAgICAgICAgICAgICAgICB7CgkJCQkgICAgICAgICAgICBkb3VibGUgbHQscnQsbGQscmQsYmQ7CgkJCQkgICAgICAgICAgICBjbnRfbHM9MDsKCQkJCSAgICAgICAgICAgIGZvcihpdD1zdGFbal0ubG93ZXJfYm91bmQobm93KTtpdCE9c3RhW2pdLmVuZCgpO2l0KyspCgkJCQkgICAgICAgICAgICB7CiAgIAkJCQkJICAgICAgICAgICAgbHQ9bm93Lm5vd3Q7CiAgIAkJCQkJICAgICAgICAgICAgbGQ9bm93Lm5vd2Q7CiAgIAkJCQkJICAgICAgICAgICAgcnQ9aXQtPm5vd3Q7CiAgIAkJICAgICAJCQkgICAgICAgIHJkPWl0LT5ub3dkOwogICAgICAJCQkJICAJICAgICAgICBiZD1wdFtqXS5iKihydC1sdCktcHRbal0uYSpjb3MocnQrcHRbal0uZCkrcHRbal0uYSpjb3MobHQrcHRbal0uZCk7CiAgIAkJCQkgICAgICAgICAgICAgICAgaWYobGQrYmQ+PXJkLWVwcykKICAJCQkJCSAJICAgICAgICAgICBsc1tjbnRfbHMrK109Kml0OwoJCQkJCSAgICAgICAgICAgIGVsc2UKCQkgICAJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgkJCQkgICAgICAgICAgICB9CgkJCQkgICAgICAgICAgICBmb3IocT0wO3E8Y250X2xzO3ErKykKCQkJCSAgICAgICAgICAgICAgIHN0YVtqXS5lcmFzZShsc1txXSk7CiAgICAgCSAgCQkJICAgICAgICBpdD1zdGFbal0uZmluZChub3cpOwoJCQkJICAgICAgICAgICAgaWYoaXQhPXN0YVtqXS5lbmQoKSkKCQkJCSAgICAgICAgICAgICAgICBicmVhazsKCQkJCQkJCXN0YVtqXS5pbnNlcnQobm93KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCQkJfQoJCX0KCX0KCXByaW50ZigiJS4yMGZcbiIsYW5zKTsKCW51bV9hbnM9MDsKCXdoaWxlKGNoIT0wKQoJewoJCWFuc19saXN0W251bV9hbnNdLmlkPWxpc3RbY2hdLmlkOwoJCWFuc19saXN0W251bV9hbnMrK10uYnQ9bGlzdFtjaF0uYnQ7CgkgICAgY2g9bGlzdFtjaF0ucGE7Cgl9CglwcmludGYoIiVkXG4iLG51bV9hbnMpOwoJZm9yKGk9bnVtX2Fucy0xO2k+PTA7aS0tKQoJICAgIHByaW50ZigiJWQgJS4yMGZcbiIsYW5zX2xpc3RbaV0uaWQrMSxhbnNfbGlzdFtpXS5idCk7CglyZXR1cm4gMDsKfQ==