/*
分割は n 個以下の単位分数の和である。
分割に含まれる単位分数の分母の積は a 以下である。
の２つの枝刈り条件を含めたアルゴリズムを書くだけ。
*/

#include<stdio.h>

int func(int,int,int,int,int);
int p,q,a,n;
int main(void){
  
  while(scanf("%d %d %d %d",&p,&q,&a,&n),p,q,a,n){
    printf("%d\n",func(n,1,1,0,1));
  }
  
  return 0;
}

/*
turn     単位分数の個数 
last      単位分数の最後の要素の分母
product  単位分数の分割の全要素の積
c,d       単位分数の分割の全要素の和の分子、分母
 */
int func(int turn,int last,int product,int c,int d){

  if(p*d==c*q)return 1;  //if(p/q==c/d)ではダメ。

  if(!turn)return 0;
  
  int i,count=0;
  for(i=last;product*i<=a;i++){

    if(c/d+1/i<=p/q)
      count+=func(turn-1,i,product*i,i*c+d,i*d);
    /*
      func(...,i*c+d,i*d);
      のc,dに渡す引数について。
      c/d+1/i = (c*i)/(d*i)+d/(d*i) = (i*c+d)/(i*d)
    */
  }  
  return count;
}