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: Wrong Answer)

using System;
using System.Collections.Generic;
//using atcorder.DataStructure;
namespace atcorder
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            atcorder.Test.Run();
        }
    }


    public class Test
    {
        public static void Run()
        {
            Input input = new Input(' ');
            input.ReadLine();
            int R = input.Next<int>();
            int G = input.Next<int>();
            int B = input.Next<int>();
            int N = input.Next<int>();
            int count = 0;
            /*int s = N / R;
            for (int i = s; i >= 0;i--){
                int sum = i * R;
                for (int j = 0; j < 3000;j++){
                    for (int k = 0; k < 3000;k++){
                        sum += k * B;
                        if (sum == N) count++;
                        if (sum >= N) break;
                    }
                }
            }*/

            for (int i = 0; i < 3000;i++){
                int sum = i * R;
                if (sum > N) break;
                for (int j = 0; j < 3000;j++){
                    sum = i* R + j * G;
                    if (sum > N) break;
                    for (int k = 0; k < 3000;k++){
                        sum = i* R + j * G + k * B;
                        if (sum == N) count++;
                        if (sum >= N) break;
                    }
                }
            }

            Console.WriteLine(count);
        }
    }




    public class Input
    {
        int arg;
        int length;
        string s;
        string[] ss;
        char sep;
        public Input(char _sep = ' ')
        {
            sep = _sep;
        }
        public void ReadLine()
        {
            s = Console.ReadLine();
            if (sep != '\0') ss = s.Split(sep);
            else
            {
                ss = new string[1];
                ss[0] = s;
            }
            arg = 0;
            length = ss.Length;
        }
        public T Next<T>()
        {
            if (arg == length) throw new IndexOutOfRangeException();
            return (T)Convert.ChangeType(ss[arg++], typeof(T));
        }
        public void SetSeparater(char _sep)
        {
            sep = _sep;
        }
    }
}