#include using namespace std; using int64 = long long; const int mod = 1e9 + 7; const int64 infll = (1LL << 62) - 1; const int inf = (1 << 30) - 1; struct IoSetup { IoSetup() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(10); cerr << fixed << setprecision(10); } } iosetup; template< typename T1, typename T2 > ostream &operator<<(ostream &os, const pair< T1, T2 > &p) { os << p.first << " " << p.second; return os; } template< typename T1, typename T2 > istream &operator>>(istream &is, pair< T1, T2 > &p) { is >> p.first >> p.second; return is; } template< typename T > ostream &operator<<(ostream &os, const vector< T > &v) { for(int i = 0; i < (int) v.size(); i++) { os << v[i] << (i + 1 != v.size() ? " " : ""); } return os; } template< typename T > istream &operator>>(istream &is, vector< T > &v) { for(T &in : v) is >> in; return is; } template< typename T1, typename T2 > inline bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); } template< typename T1, typename T2 > inline bool chmin(T1 &a, T2 b) { return a > b && (a = b, true); } template< typename T = int64 > vector< T > make_v(size_t a) { return vector< T >(a); } template< typename T, typename... Ts > auto make_v(size_t a, Ts... ts) { return vector< decltype(make_v< T >(ts...)) >(a, make_v< T >(ts...)); } template< typename T, typename V > typename enable_if< is_class< T >::value == 0 >::type fill_v(T &t, const V &v) { t = v; } template< typename T, typename V > typename enable_if< is_class< T >::value != 0 >::type fill_v(T &t, const V &v) { for(auto &e : t) fill_v(e, v); } vector< bool > prime_table(int n) { vector< bool > prime(n + 1, true); if(n >= 0) prime[0] = false; if(n >= 1) prime[1] = false; for(int i = 2; i * i <= n; i++) { if(!prime[i]) continue; for(int j = i + i; j <= n; j += i) { prime[j] = false; } } return prime; } int main() { int N; cin >> N; int p[][3] = { {2, 2, 2}, {2, 3, 7}, {2, 5, 23}, {2, 7, 47}, {2, 13, 167}, {2, 19, 359}, {2, 29, 839}, {2, 37, 1367}, {2, 43, 1847}, {2, 47, 2207}, {2, 61, 3719}, {2, 71, 5039}, {2, 89, 7919}, {2, 103, 10607}, {2, 107, 11447}, {2, 127, 16127}, {2, 131, 17159}, {2, 139, 19319}, {2, 173, 29927}, {2, 191, 36479}, {2, 211, 44519}, {2, 223, 49727}, {2, 233, 54287}, {2, 239, 57119}, {2, 257, 66047}, {2, 293, 85847}, {2, 313, 97967}, {2, 337, 113567}, {2, 359, 128879}, {2, 421, 177239}, {2, 443, 196247}, {2, 449, 201599}, {2, 467, 218087}, {2, 491, 241079}, {2, 523, 273527}, {2, 541, 292679}, {2, 569, 323759}, {2, 587, 344567}, {2, 607, 368447}, {2, 653, 426407}, {2, 677, 458327}, {7, 3, 2}, {23, 5, 2}, {47, 7, 2}, {167, 13, 2}, {359, 19, 2}, {839, 29, 2}, {1367, 37, 2}, {1847, 43, 2}, {2207, 47, 2}, {3719, 61, 2}, {5039, 71, 2}, {7919, 89, 2}, {10607, 103, 2}, {11447, 107, 2}, {16127, 127, 2}, {17159, 131, 2}, {19319, 139, 2}, {29927, 173, 2}, {36479, 191, 2}, {44519, 211, 2}, {49727, 223, 2}, {54287, 233, 2}, {57119, 239, 2}, {66047, 257, 2}, {85847, 293, 2}, {97967, 313, 2}, {113567, 337, 2}, {128879, 359, 2}, {177239, 421, 2}, {196247, 443, 2}, {201599, 449, 2}, {218087, 467, 2}, {241079, 491, 2}, {273527, 523, 2}, {292679, 541, 2}, {323759, 569, 2}, {344567, 587, 2}, {368447, 607, 2}, {426407, 653, 2}, {458327, 677, 2}, }; int ret = 0; for(auto t : p) { if(t[0] <= N && t[1] <= N && t[2] <= N) ++ret; } cout << ret << endl; }