I think it's a pretty difficult problem. I struggled with it for a long time.
You need to use some techniques and consider precision issues.
The initial idea is that when the faster person runs once, they will definitely collide once.
In addition to colliding directly at the endpoints, there may also be problems with different endpoints.
//
// GGGGGGGGGGGGG CCCCCCCCCCCCC AAA
// GGG::::::::::::G CCC::::::::::::C A:::A
// GG:::::::::::::::G CC:::::::::::::::C A:::::A
// G:::::GGGGGGGG::::G C:::::CCCCCCCC::::C A:::::::A
// G:::::G GGGGGG C:::::C CCCCCC A:::::::::A
//G:::::G C:::::C A:::::A:::::A
//G:::::G C:::::C A:::::A A:::::A
//G:::::G GGGGGGGGGGC:::::C A:::::A A:::::A
//G:::::G G::::::::GC:::::C A:::::A A:::::A
//G:::::G GGGGG::::GC:::::C A:::::AAAAAAAAA:::::A
//G:::::G G::::GC:::::C A:::::::::::::::::::::A
// G:::::G G::::G C:::::C CCCCCC A:::::AAAAAAAAAAAAA:::::A
// G:::::GGGGGGGG::::G C:::::CCCCCCCC::::C A:::::A A:::::A
// GG:::::::::::::::G CC:::::::::::::::C A:::::A A:::::A
// GGG::::::GGG:::G CCC::::::::::::C A:::::A A:::::A
// GGGGGG GGGG CCCCCCCCCCCCCAAAAAAA AAAAAAA
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <climits>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <cctype>
#include <utility>
#include <ctime>
using namespace std;
#ifdef DEBUG
#define debug(...) printf("!\_\_DEBUG: "),printf(\_\_VA\_ARGS\_\_)
#define gettime() end\_time=clock();printf("now running time is %.7f\\n",(float)(end\_time - start\_time)/CLOCKS\_PER\_SEC);
#else
#define debug(...)
#define gettime()
#endif
typedef unsigned int uint;
typedef long long int Int;
#define Set(a,s) memset(a,s,sizeof(a))
#define Write(w) freopen(w,"w",stdout)
#define Read(r) freopen(r,"r",stdin)
#define Pln() printf("\\n")
#define I\_de(x,n)for(int i=0;i<n;i++)printf("%d ",x\[i\]);Pln()
#define De(x)printf(#x"%d\\n",x)
#define For(i,x)for(int i=0;i<x;i++)
#define CON(x,y) x##y
#define Pmz(dp,nx,ny)for(int hty=0;hty<ny;hty++){for(int htx=0;htx<nx;htx++){\\
printf("%d ",dp\[htx\]\[hty\]);}Pln();}
#define M 55
#define PII pair<int,int\>
#define PB push\_back
#define oo INT\_MAX
#define Set\_oo 0x3f
#define FOR(it,c) for(\_\_typeof((c).begin()) it=(c).begin();it!=(c).end();it++)
#define eps 1e-10
bool xdy(double x,double y){return x>y+eps;}
bool xddy(double x,double y){return x>y-eps;}
bool xcy(double x,double y){return x<y-eps;}
bool xcdy(double x,double y){return x<y+eps;}
bool xeqy(double x,double y){return fabs(x-y)<eps;}
int min3(int x,int y,int z){
int tmp=min(x,y);
return min(tmp,z);
}
int max3(int x,int y,int z){
int tmp=max(x,y);
return max(tmp,z);
}
Int l,u,v,t;
Int gcd(Int a,Int b){
if(b==0)return a;
return gcd(b,a%b);
}
void solve(){
Int g=gcd(u,v);
// debug("%lld %lld\\n",u,v);
if(v==0){
if(u==0){
puts("0");
return ;
}
Int ans=t\*u/l;
// debug("%lld\\n",ans);
printf("%lld\\n",ans/2+((ans&1)));
return ;
}
long double su=1.0\*l/u,sv=1.0\*l/v;
Int ans=(t\*u)/l;
Int ans2=(t\*v)/l;
Int fans=ans;
long double mt=1.0\*l/g;
// double r=t-ans\*su;
// double r2=t-ans2\*sv;
debug("%lld\\n",fans);
Int tm=t\*u%l;
Int tm2=t\*v%l;
tm%=l;tm2%=l;
debug("tm>>%lld %lld %lld %lld\\n",tm,tm2,ans,ans2);
if(((ans+ans2)&1)&&(tm!=0||tm2!=0)){
if(tm>=tm2)fans++;
}else{
if(tm>=l-tm2)fans++;
}
debug("%lld\\n",fans);
if((u/g-v/g)&1){
Int tmp=t/mt;
debug("tmp >>%lld %lld %f \\n",tmp,t,mt);
fans-=tmp/2;
if(xdy(t,tmp\*mt)&&(tmp&1)){
fans-=1;
}
}
// debug("%lld %.6f\\n\\n",fans,mt);
printf("%lld\\n",fans);
}
int main() {
// freopen("out.txt","w",stdout);
ios\_base::sync\_with\_stdio(0);
while(~scanf("%lld%lld%lld%lld",&l,&u,&v,&t)&&l){
if(v>u)swap(u,v);
solve();
}
// gettime();
}