using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; class TEST{ static void Main(){ Sol mySol =new Sol(); mySol.Solve(); } } class Sol{ public void Solve(){ bool[] isPrime = new bool[M+1]; for(int i=2;i<=M;i++) isPrime[i] = true; List P = new List(); for(int i=2;i<=M;i++){ if(!isPrime[i])continue; P.Add(i); for(int j=i+i;j<=M;j+=i) isPrime[j] = false; } int[] dp = new int[M+1]; for(int i=0;i<=M;i++) dp[i] = -1; dp[0] = 0; foreach(var p in P){ for(int i=M;i>=0;i--){ if(dp[i] == -1) continue; if(i+p <= M){ dp[i+p] = Math.Max(dp[i+p],dp[i]+1); } } } Console.WriteLine(dp[M]); } int M; public Sol(){ M = ri(); } static String rs(){return Console.ReadLine();} static int ri(){return int.Parse(Console.ReadLine());} static long rl(){return long.Parse(Console.ReadLine());} static double rd(){return double.Parse(Console.ReadLine());} static String[] rsa(char sep=' '){return Console.ReadLine().Split(sep);} static int[] ria(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>int.Parse(e));} static long[] rla(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>long.Parse(e));} static double[] rda(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>double.Parse(e));} }