using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
using static System.Math;
class Z { static void Main() => new K(); }
class K
{
	int F => int.Parse(Str);
	long FL => long.Parse(Str);
	int[] G => Strs.Select(int.Parse).ToArray();
	long[] GL => Strs.Select(long.Parse).ToArray();
	string Str => ReadLine();
	string[] Strs => Str.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
	const int MOD = 1000000007;
	public K()
	{
		SetOut(new StreamWriter(OpenStandardOutput()) { AutoFlush = false });
		Solve();
		Out.Flush();
	}
	void Solve()
	{
		var N = F;
		Integer.SetBound(N);
		var fact = new Integer();
		for (var n = 2; n <= N; n++) fact = fact * n;
		var s = 0;
		foreach (var x in Integer.Calc1(74)) if (fact % x) s++;
		foreach (var x in Integer.Calc2(24, 2)) if (fact % x) s++;
		foreach (var x in Integer.Calc2(14, 4)) if (fact % x) s++;
		foreach (var x in Integer.Calc3(4, 2)) if (fact % x) s++;
		WriteLine(s);
	}
}
class Integer
{
	static List<int> Primes;
	public static void SetBound(int N) { Primes = Func.GetPrimes(N); }
	readonly Dictionary<int, int> exp = new Dictionary<int, int>();
	public int this[int p] { get { return exp.ContainsKey(p) ? exp[p] : 0; } private set { exp[p] = value; } }
	public long NumberOfDivisors { get { var n = 1L; foreach (var e in exp.Values) n *= e + 1; return n; } }
	public static bool operator %(Integer x, Integer y)
	{
		foreach (var t in y.exp) if (x[t.Key] < t.Value) return false;
		return true;
	}
	public static Integer operator *(Integer x, Integer y)
	{
		var z = new Integer();
		foreach (var t in x.exp) z[t.Key] = t.Value + y[t.Key];
		foreach (var t in y.exp) if (!x.exp.ContainsKey(t.Key)) z[t.Key] = t.Value;
		return z;
	}
	public static implicit operator BigInteger(Integer x)
	{
		var n = BigInteger.One;
		foreach (var t in x.exp) n *= BigInteger.Pow(t.Key, t.Value);
		return n;
	}
	public static implicit operator Integer(int n)
	{
		var x = new Integer();
		foreach (var p in Primes)
		{
			if (p * p > n) break;
			if (n % p == 0)
			{
				var e = 0;
				while (n % p == 0) { n /= p; e++; }
				x[p] = e;
			}
		}
		if (n > 1) x[n] = 1;
		return x;
	}
	public static IEnumerable<Integer> Calc1(int e)
	{
		foreach (var p in Primes) yield return new Integer { [p] = e };
	}
	public static IEnumerable<Integer> Calc2(int e, int f)
	{
		foreach (var p in Primes) foreach (var q in Primes) if (p != q) yield return new Integer { [p] = e, [q] = f };
	}
	public static IEnumerable<Integer> Calc3(int e, int f)
	{
		foreach (var p in Primes) foreach (var q in Primes)
				if (p < q) foreach (var r in Primes) if (r != p && r != q) yield return new Integer { [p] = e, [q] = e, [r] = f };
	}
}
static class Func
{
	public static List<int> GetPrimes(int n)
	{
		var m = (n - 1) >> 1;
		var ps = new List<int> { 2 };
		var ng = new bool[m];
		for (var p = 0; p < m; p++)
			if (!ng[p])
			{
				var x = 2 * p + 3;
				ps.Add(x);
				for (var k = 3 * p + 3; k < m; k += x) ng[k] = true;
			}
		return ps;
	}
	public static Dictionary<int, int> Factorize(int n, List<int> primes)
	{
		var d = new Dictionary<int, int>();
		for (var j = 0; j < primes.Count; j++)
		{
			var i = primes[j];
			if (i * i > n) break;
			if (n % i == 0)
			{
				d.Add(i, 0);
				while (n % i == 0) { n /= i; d[i]++; }
			}
		}
		if (n > 1) d.Add(n, 1);
		return d;
	}
}

Measured memory_bytes: 13280