import sys import math def sieve(n): sieve = [True] * (n + 1) sieve[0] = sieve[1] = False for i in range(2, int(math.sqrt(n)) + 1): if sieve[i]: sieve[i*i : n+1 : i] = [False] * len(sieve[i*i : n+1 : i]) primes = [i for i, is_p in enumerate(sieve) if is_p] return primes def main(): N = int(sys.stdin.readline()) if N < 2: print(-1) return max_prime_check = 2 * N primes_sieve = sieve(max_prime_check) primes_set = set(primes_sieve) primes = [] sum_primes = [] current_sum = 0 for p in primes_sieve: if current_sum + p > N: break primes.append(p) current_sum += p sum_primes.append(current_sum) if current_sum == N: break # Exact sum found, no need to proceed for i in range(len(sum_primes) - 1, -1, -1): s = sum_primes[i] if s > N: continue d = N - s if d == 0: print(i + 1) return p_max = primes[i] x = p_max + d if x > max_prime_check: continue # Beyond sieve limit; but per sieve setup, this should be covered if x in primes_set: if i == 0: print(1) return else: if x > primes[i - 1]: print(i + 1) return print(-1) if __name__ == "__main__": main()