#include using namespace std; #define rep(i,a,b) for(int i=a;i P; void make_primes(int n) { vector primes; primes.resize(n + 1, true); primes[0] = primes[1] = false; rep(i, 2, sqrt(n)) if (primes[i]) for (int j = 0; i * (j + 2) < n; j++) primes[i * (j + 2)] = false; rep(i, 2, n + 1) if (primes[i]) P.push_back(i); } //----------------------------------------------------------------- int dp[3010][40101]; int main() { int N; cin >> N; make_primes(N + 1); rep(i, 0, 3010) rep(j, 0, 20101) dp[i][j] = -1; dp[0][0] = 0; rep(i, 0, P.size()) rep(j, 0, N + 1) if(0 <= dp[i][j]){ dp[i + 1][j] = max(dp[i + 1][j], dp[i][j]); dp[i + 1][j + P[i]] = max(dp[i + 1][j + P[i]], dp[i][j] + 1); } cout << dp[P.size()][N] << endl; }