// Original C++ solution (slower):
#include<bits/stdc++.h>

#define F first

#define S second

#define MP make_pair

#define pb push_back

#define endl '\n'



using namespace std;



typedef long long LL;

typedef pair< int, int > P;

typedef pair< LL, LL > LP;

typedef pair< int, P > iP;

typedef pair< P, P > PP;



static const int INF = INT_MAX;

static const LL LINF = LLONG_MAX;

static const int MIN = INT_MIN;

static const LL LMIN = LLONG_MIN;

static const int MOD = 1000000007;

static const int SIZE = 100005;



int dx[] = {0, -1, 1, 0};

int dy[] = {-1, 0, 0, 1};



int main() {

    ios::sync_with_stdio(false);

    cin.tie(0);

    

    int r, g, b, n;

    cin >> r >> g >> b >> n;

    int res = 0;

    for( int i = 0; i <= n; ++i ) {

        for( int j = 0; j <= n; ++j ) {

            if( !( ( n - ( i * r + j * g ) ) % b ) && n - ( i * r + j * g ) >= 0 ) ++res;

        }

    }

    cout << res << endl;

    return 0;

}


// Optimized solution to the same problem (faster):
#include <cctype>

#include <cfloat>

#include <climits>

#include <cmath>

#include <csignal>

#include <cstdarg>

#include <cstddef>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <ctime>



#include <algorithm>

#include <bitset>

#include <complex>

#include <deque>

#include <ios>

#include <iostream>

#include <istream>

#include <iterator>

#include <limits>

#include <list>

#include <locale>

#include <map>

#include <memory>

#include <new>

#include <numeric>

#include <ostream>

#include <queue>

#include <set>

#include <sstream>

#include <stack>

#include <string>

#include <utility>

#include <valarray>

#include <vector>



#if __cplusplus >= 201103L

#include <array>

#include <forward_list>

#include <random>

#include <regex>

#include <scoped_allocator>

#include <system_error>

#include <thread>

#include <tuple>

#include <typeindex>

#include <unordered_map>

#include <unordered_set>

#endif



#define F first

#define S second

#define MP make_pair

#define pb push_back

#define all(a) a.begin(), a.end()

#define lcm( a, b ) (a)/__gcd((a),(b))*(b)

#define endl '\n'



using namespace std;



typedef long long LL;

typedef pair< int, int > P;

typedef pair< LL, LL > LP;

typedef pair< int, P > iP;

typedef pair< P, P > PP;



static const int INF = INT_MAX;

static const LL LINF = LLONG_MAX;

static const int MIN = INT_MIN;

static const LL LMIN = LLONG_MIN;

static const int MOD = 1000000007;

static const int SIZE = 200005;



const int dx[] = {0, -1, 1, 0};

const int dy[] = {-1, 0, 0, 1};



vector< int > Div( int n ) {

    vector< int > ret;

    for( int i = 1; i * i <= n; ++i ) {

        if( n % i == 0 ) {

            ret.pb( i );



            if( i * i != n ) ret.pb( n / i );

        }

    }

    sort( all( ret ) );

    return ret;

}



int main() {

    ios::sync_with_stdio(false);

    cin.tie(0);



    int r, g, b, n;

    cin >> r >> g >> b >> n;

    int cnt = 0;

    for( int i = 0; i <= 3000; ++i ) {

        for( int j = 0; j <= 3000; ++j ) {

            int num = i * r + j * g;

            if( n < num ) break;

            num = n - num;

            if( num % b == 0 ) {

                ++cnt;



            }

        }

    }



    cout << cnt << endl;

    return 0;

}




// Fastest known solution for this problem: