#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <list>
#include <sstream>
#include <cmath>
using namespace std;

#define rep(i,n) for(int i=0;i<n;i++)
#define reps(s,i,n) for(int i=s;i<n;i++)
#define rev(i,n) for(int i=n-1;i>=0;i--)
#define skip(i,n,p) for(int i=0;i<n;i+=p)
#define all(a)  (a).begin(),(a).end()
#define int64 long long
#define debug cout << __FILE__ << ":" << __LINE__ << endl;
#define INF 1e9

struct Init {
    Init() {
        cin.tie(0);
        ios::sync_with_stdio(false);
        cout.precision(20);
        cout << fixed;
    }
} init;

template <typename _Ty>
ostream& operator << (ostream& ostr, const vector<_Ty>& v) {
    for(int i = 0; i < (int) v.size(); i++) {
        ostr << v[i] << (i + 1 != v.size() ? " " : "");
    }
    return ostr;
}

template <typename _K, typename _V>
ostream& operator << (ostream& ostr, const map<_K, _V>& v) {
    ostr << "{";
    for (auto iter = v.begin(); iter != v.end(); ++iter) {
        ostr << (*iter).first << ": " << (*iter).second << ", ";
    }
    ostr << "}";
    return ostr;
}

template <typename _K>
ostream& operator << (ostream& ostr, const set<_K>& v) {
    for (auto iter = v.begin(); iter != v.end(); ++iter) {
        ostr << *iter << (iter != v.end() ? " " : "");
    }
    return ostr;
}

int64 gcd(int64 a, int64 b) {
    if (a < b) a, b = b, a;
    if (a % b == 0) return b;
    return gcd(b, a % b);
}

int64 modinv(int64 a, int64 m) {
    int64 b = m, u = 1, v = 0;
    while (b) {
        int64 t = a / b;
        a -= t * b; swap(a, b);
        u -= t * v; swap(u, v);
    }
    u %= m;
    if (u < 0) u += m;
    return u;
}

#define M map<int, int>
M f(int n) {
    M m;

    int c = 2;
    while (n != 1) {
        if (n % c == 0) {
            n = n / c;
            m[c]++;
        } else {
            c++;
        }
    }
    return m;
}

int main() {
    int N;
    cin >> N;

    M t;
    reps(1, i, N+1) {
        M m = f(i);
        for (auto iter = m.begin(); iter != m.end();  ++iter) {
            auto p = *iter;
            t[p.first] += p.second;
        }
    }

    vector<int> keys;
    for (auto iter = t.begin(); iter != t.end(); ++iter) {
        keys.push_back((*iter).first);
    }

    set<double> ans;

    // 3 5 5
    rep(i, keys.size()) {
        rep(j, keys.size()) {
            rep(k, keys.size()) {
                if (i == j || i == k || j == k) continue;
                int a = t[keys[i]];
                int b = t[keys[j]];
                int c = t[keys[k]];

                if (a < 2 || b < 4 || c < 4) continue;
                ans.insert(pow(keys[i], 2) * pow(keys[j], 4) * pow(keys[k], 4));
            }
        }
    }

    // 3 25
    // 5 15
    rep(i, keys.size()) {
        rep(j, keys.size()) {
            if (i == j || i == j) continue;
            int a = t[keys[i]];
            int b = t[keys[j]];

            if (a >= 2 && b >= 24) ans.insert(pow(keys[i], 2) * pow(keys[j], 24));
            if (a >= 4 && b >= 14) ans.insert(pow(keys[i], 4) * pow(keys[j], 14));
        }
    }

    // 75
    rep(i, keys.size()) {
        int a = t[keys[i]];
        if (a >= 74) ans.insert(pow(keys[i], 75));
    }

    cout << ans.size() << endl;
}


Measured memory_bytes: 256