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 C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using static System.Math;
using static System.Console;

namespace B_D2019
{
    class MainClass
    {

        static int[] s;


        public static void Main(string[] args)
        {

            s = Array.ConvertAll(ReadLine().Split().ToArray(), int.Parse);
            int n = s[3];           
            int rmax = n/s[0] +1;
            int gmax = n/s[1] +1;
            int bmax = n/s[2]+1;


            int ans = 0;

            for(int i= 0;i<=rmax;i++){
                if(i*s[0]==n){
                    ans++;
                   // WriteLine("only i:  {0}",i);
                    continue;
                }
                for(int j= 0;j<=gmax;j++){
                    int diff = n-i*s[0]-j*s[1];
                    if(diff>=0){
                        if(diff==0){
                            ans++;
                         //   WriteLine("only i,j:  {0} {1}",i,j);
                        }else if(diff%s[2]==0){
                            ans++;
                          //  WriteLine("only i,j,k:  {0} {1}",i,j);
                        }
                    }
                    else break;
                }
            }
        
            


            WriteLine(ans);


        }
    }
}