#include <bits/stdc++.h>
using namespace std;

#define d(x) cerr << #x ":" << x << endl;
#define dd(x, y) cerr << "(" #x "," #y "):(" << x << "," << y << ")" << endl
#define rep(i, n) for (int i = (int)(0); i < (int)(n); i++)
#define repp(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define all(v) v.begin(), v.end()
#define dump(v)                  \
    cerr << #v ":[ ";            \
    for (auto macro_vi : v) {    \
        cerr << macro_vi << " "; \
    }                            \
    cerr << "]" << endl;
#define ddump(v)                           \
    cerr << #v ":" << endl;                \
    for (auto macro_row : v) {             \
        cerr << "[";                       \
        for (auto macro__vi : macro_row) { \
            cerr << macro__vi << " ";      \
        }                                  \
        cerr << "]" << endl;               \
    }
using lint       = long long;
const int INF    = 1e9;
const lint LINF  = 1e18;
const lint MOD   = 1e9 + 7;
const double EPS = 1e-10;

const int mod = 1000000007;
struct mint {
    long long x;
    mint(long long x = 0) : x((x % mod + mod) % mod) {}
    mint& operator+=(const mint a) {
        if ((x += a.x) >= mod) x -= mod;
        return *this;
    }
    mint& operator-=(const mint a) {
        if ((x += mod - a.x) >= mod) x -= mod;
        return *this;
    }
    mint& operator*=(const mint a) {
        (x *= a.x) %= mod;
        return *this;
    }
    mint operator+(const mint a) const {
        mint res(*this);
        return res += a;
    }
    mint operator-(const mint a) const {
        mint res(*this);
        return res -= a;
    }
    mint operator*(const mint a) const {
        mint res(*this);
        return res *= a;
    }
    mint pow(long long t) const {
        if (!t) return 1;
        mint a = pow(t >> 1);
        a *= a;
        if (t & 1) a *= *this;
        return a;
    }

    // for prime mod
    mint inv() const { return pow(mod - 2); }
    mint& operator/=(const mint a) { return (*this) *= a.inv(); }
    mint operator/(const mint a) const {
        mint res(*this);
        return res /= a;
    }
};
struct combination {
    vector<mint> fact, ifact;
    combination(int n) : fact(n + 1), ifact(n + 1) {
        assert(n < mod);
        fact[0] = 1;
        for (int i = 1; i <= n; ++i)
            fact[i] = fact[i - 1] * i;
        ifact[n] = fact[n].inv();
        for (int i = n; i >= 1; --i)
            ifact[i - 1] = ifact[i] * i;
    }
    mint operator()(int n, int k) {
        if (k < 0 || k > n) return 0;
        return fact[n] * ifact[k] * ifact[n - k];
    }
    mint operator()(int n) { return fact[n]; }
};

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

    map<int, int> div_num_of;
    for (int NUM = 2; NUM < N + 1; NUM++) {
        int n = NUM;
        for (int div = 2; div <= NUM; div++) {
            while (n % div == 0) {
                n /= div;
                div_num_of[div]++;
            }
        }
    }

    // for (auto p : div_num_of) {
    //     int div, cnt;
    //     tie(div, cnt) = p;
    //     dd(div, cnt);
    // }

    combination comb(1000);
    int ans = 0;
    // 5 5 3
    for(int div3 = 2; div3<=100; div3++){
        if(div_num_of[div3]>=2){
            int div5_cnt=0;
            for(int div5=2; div5<=100; div5++){
                if(div5==div3){
                    continue;
                }
                else{
                    if(div_num_of[div5]>=4){
                        div5_cnt++;
                    }                    
                }
            }
            ans+=comb(div5_cnt,2).x;
        }
    }
    
    // 25 3
    for(int div3 = 2; div3<=100; div3++){
        if(div_num_of[div3]>=2){
            for(int div25=2; div25<=100; div25++){
                if(div25==div3){
                    continue;
                }
                else{
                    if(div_num_of[div25]>=24){
                        ans++;
                    }
                }
            }
        }
    }

    // 15 5
    for(int div5 = 2; div5<=100; div5++){
        if(div_num_of[div5]>=4){
            for(int div15=2; div15<=100; div15++){
                if(div15==div5){
                    continue;
                }
                else{
                    if(div_num_of[div15]>=14){
                        ans++;
                    }

                }
            }
        }
    }
    // 75
    for(int div=2; div<=100; div++){
        if(div_num_of[div]>=74){
            ans++;
        }
    }
    cout << ans << endl;
    return 0;
}

Measured memory_bytes: 256