#include #include using namespace std; struct ratio { int c, m; }; int gcd(int a, int b) { int temp; while ( a%b!=0 ) { temp = b; b = a%b; a=temp; } return b; } int countans(const ratio &r, int curm, int curmul, int maxmul, int left) { int i, j; int ret=0; ratio r2; for ( i=curm ; r.c*imaxmul ) return 0; if ( left==1 ) { return r.c*i==r.m?1:0; } while ( (long long)i*curmul<=maxmul && r.c*i<=r.m*left ) { r2.c = r.c*i-r.m; r2.m = r.m*i; if ( r2.c==0 ) { ret++; i++; continue; } j = gcd(r2.c, r2.m); r2.c/=j; r2.m/=j; /*printf("%d/%d-1/%d=%d/%d from%d %d->%d l %d ret=%d\n", r.c, r.m, i, r2.c, r2.m, curm, curmul, maxmul, left, ret);*/ ret += countans(r2, i, curmul*i, maxmul, left-1); i++; } return ret; } int main(void) { int p, q, mul, left; ratio r; while ( scanf("%d%d%d%d", &p, &q, &mul, &left)==4 && p!=0 ) { r.c=p; r.m=q; printf("%d\n", countans(r, 1, 1, mul, left)); } }