/*
TASK:crossing
LANG:C++
*/
#include<iostream>
#include<cmath>
using namespace std;
double dist(double ax,double ay,double bx,double by)
{
       return (double)sqrt((double)(ax-bx)*(double)(ax-bx)+(double)(ay-by)*(double)(ay-by));   

}
void solve()
{
double a,b,s,w;
cin>>w>>s>>a>>b;
double ax=0,ay=w/2,bx=s,by=-w/2,p1=s/2,p2=s/2;
double Min=dist(ax,ay,bx,by)/a;

double step=1;
double temp=Min+5;
double lasttime=Min;


while(1)
{
        if(Min<temp)
        {
                    do
                    {
                    Min=temp;
                    p1-=step;
               p2+=step;
temp=(double)(p2-p1)/(double)a;
double v=(double)dist(ax,ay,p1,0)/(double)b;
double r=(double)dist(bx,by,p2,0)/(double)b;
temp+=(double)v+(double)r;
           
                    }
                    while(Min>temp);
      step=-(double)step/(double)2;
        }
        if(Min<temp)
        {
                    do
                    {
                    
                    p1-=step;
                    p2+=step;
                    temp=(double)(p2-p1)/(double)a;
                    double v=(double)dist(ax,ay,p1,0)/(double)b;
                    double r=(double)dist(bx,by,p2,0)/(double)b;
                    temp+=(double)v+(double)r;
           if(abs(Min-temp)<0.00015)break;
                    }
                    while(Min<temp);
      Min=temp;
      step=-(double)step/(double)2;
        }
        
        


if(temp-Min<0.00015)break;
/*if(temp>Min){step=-(double)step/(double)2;}
{
    Min=min(Min,temp);

}
*/



}
Min*=(double)3600;
Min=(int)Min;
cout<<(int)(Min/3600)<<":"<<(int)(Min/60)%60<<":"<<(int)(Min)%60<<endl;
}
int main()
{

  solve();
 system("pause");
 return 0;
}
