#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;
}