#include <bits/stdc++.h>
#include <numeric>
#define REP(i, s, n) for (int i = s; i < n; ++i)
#define rep(i, n) REP(i, 0, n)
#define SORT(c) sort((c).begin(), (c).end())
#define SORT_INV(c) sort((c).begin(), (c).end(), greater<int>())

#define IINF INT_MAX
#define LLINF LLONG_MAX
#define DEBUG false
#define LL long long
#define Dev 1000000007

// sort(a.begin(), a.end(), std::greater<int>());
using namespace std;

int main()
{
    int prime[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
    int n;
    cin >> n;
    map<int, int> dic;
    REP(i, 2, n + 1)
    {
        int num = i;
        int j = 0;
        while (num != 1)
        {
            if (num % prime[j] == 0)
            {
                dic[j]++;
                num /= prime[j];
            }
            else
            {
                j++;
            }
        }
    }
    int ans = 0;
    //0075のケース
    for (auto i = dic.begin(); i != dic.end(); ++i)
    {
        if (i->second + 1 >= 75)
            ans++;
    }
    for (auto i = dic.begin(); i != dic.end(); ++i)
    {
        for (auto j = dic.begin(); j != dic.end(); ++j)
        {
            if (i == j)
                continue;
            if (i->second + 1 >= 3 && j->second + 1 >= 25)
                ans++;
            if (i->second + 1 >= 5 && j->second + 1 >= 15)
                ans++;
        }
    }
    for (auto i = dic.begin(); i != dic.end(); ++i)
    {
        for (auto j = next(i); j != dic.end(); ++j)
        {
            for (auto k = next(j); k != dic.end(); ++k)
            {
                if (i->second + 1 >= 3 && j->second + 1 >= 5 && k->second + 1 >= 5)
                    ans++;
                if (i->second + 1 >= 5 && j->second + 1 >= 3 && k->second + 1 >= 5)
                    ans++;
                if (i->second + 1 >= 5 && j->second + 1 >= 5 && k->second + 1 >= 3)
                    ans++;
            }
        }
    }
    cout << ans << endl;
    return 0;
}
