Problem:
Score : 200 points

Problem Statement

Snuke has come to a store that sells boxes containing balls. The store sells the following three kinds of boxes:

Red boxes, each containing R red balls

Green boxes, each containing G green balls

Blue boxes, each containing B blue balls

Snuke wants to get a total of exactly N balls by buying r red boxes, g green boxes and b blue boxes.
How many triples of non-negative integers (r,g,b) achieve this?

Constraints

All values in input are integers.

1 \leq R,G,B,N \leq 3000

Input

Input is given from Standard Input in the following format:

R G B N

Output

Print the answer.

Sample Input 1

1 2 3 4

Sample Output 1

4

Four triples achieve the objective, as follows:

(4,0,0)

(2,1,0)

(1,0,1)

(0,2,0)

Sample Input 2

13 1 4 3000

Sample Output 2

87058

Solution in JavaScript (node.js v5.12) (judge verdict: Accepted)

function myOut(text){console.log(text);}//standard output
function Main(input) {
	input = input.trim();
	//input = input.trim().split(" ");
	//input = input.trim().split("\n");
	input = input.trim().split(" ").map((a)=>Number(a));
	//input = input.trim().split("\n").map((a)=>Number(a));
  
  var R = input[0];
  var G = input[1];
  var B = input[2];
  var N = input[3];
  var list = [R,G,B];
  var max = Math.max.apply(null,list);
  list.splice(list.indexOf(max), 1);
  var first = Math.floor(N / max);
  var next = Math.max.apply(null,list);
  var last = Math.min.apply(null,list);
  
  var output = 0;
  for(var i = 0; i <= first; i++){
    var tmp = N - (i * max);//残り10
    var tmp2 = Math.floor(tmp / next);
    if(i == 227){
       //console.log(tmp);
       }
    for(j = 0; j <= tmp2; j++){
      var tmp3 = tmp - (j * next);
      if(tmp3 % last == 0){
         output++
         }
    }
    
  }
  console.log(output);
}

Main(require("fs").readFileSync("/dev/stdin", "utf8"));