#include<stdio.h>
FILE *in, *out;
long long scv, dur, mpscv, goal, mpd, minerals, goal, t, terminat, aftershave, b4, jump;
int decide(int a, int b)
{
if(a % b == 0) {
return a / b;
} else {
return a / b + 1;
}
}
void init()
{
fscanf(in, "%d%d%d%d", &scv, &dur, &mpscv, &goal);
}
int main () {
in = fopen("scv.in", "r");
out = fopen("scv.out", "w");
init();
mpd = mpscv;
minerals = 0;
t = 0;
terminat = 0;
if(scv >= goal) {
terminat = 1;
fprintf(out, "%d\n", decide(goal, mpscv));
}
while(terminat == 0) {
//printf("seara : minerals = %3lld || t = %3lld || mpd = %3lld\n", minerals, t, mpd);
while(minerals < scv) {
minerals = minerals + mpd;
t = t + 1;
//printf("seara : minerals = %3lld || t = %3lld || mpd = %3lld\n", minerals, t, mpd);
}
b4 = decide((goal - minerals), mpd);
aftershave = dur + decide((goal - (minerals - scv) - (dur * mpd)),(mpd + mpscv));
//printf("seara : b4 = %3lld || after = %3lld\n\n", b4, aftershave);
if(aftershave < b4) {
//nrscv = nrscv + 1;
minerals = minerals - scv;
//printf("scvBought : minerals = %3lld || t = %3lld || mpd = %3lld\n", minerals, t, mpd);
minerals = minerals + (mpd * dur);
mpd = mpd + mpscv;
t = t + dur;
} else {
terminat = 1;
fprintf(out, "%lld\n", t + b4);
}
//printf("scvReady : minerals = %3lld || t = %3lld || mpd = %3lld\n", minerals, t, mpd);
}
fclose(in);
fclose(out);
return 0;
}