N = int(input()) # エラトステネスの篩で素数リストを作成 is_prime = [1] * (N+1) is_prime[0] = is_prime[1] = 0 for i in range(2, N+1): if is_prime[i]: for j in range(i*2, N+1, i): is_prime[j] = 0 primes = [i for i in range(N+1) if is_prime[i]] C = len(primes) # メモ化再帰 dp = [[-1] * (N+1) for _ in range(C+1)] import sys sys.setrecursionlimit(10101010) def dfs(i, w): if w == 0: return 0 # wをちょうど作れるならカウント開始 if i == C or w < 0: return -1 # これ以上選択できない場合 if dp[i][w] != -1: return dp[i][w] res = dfs(i+1, w) # i番目の素数を使わない場合 use_prime = dfs(i+1, w - primes[i]) # i番目の素数を使う場合 if use_prime != -1: # w-primes[i] を作れる場合のみカウント res = max(res, use_prime + 1) dp[i][w] = res return res print(dfs(0, N))