#include <bits/stdc++.h>
using namespace std;
const int N = 100000;
const int M = 100000;
bool prime[N];
vector<int> primes;
pair<int, int> s[M];
bool isPrime(int n) {
  for (int i = 1; i < primes.size(); i++) {
    if (1ll * primes[i] * primes[i] > n) break;
    if (n % primes[i] == 0) return false;
  }
  return true;
}
int main() {
  memset(prime, true, sizeof(prime));
  prime[1] = false;
  primes.push_back(0);
  for (int i = 2; i < N; i++) {
    if (prime[i]) {
      primes.push_back(i);
      for (int j = 2 * i; j < N; j += i) {
        prime[j] = false;
      }
    }
  }
  for (int i = 0; i < M; i++) s[i] = make_pair(-1, -1);
  for (int i = 0; i < primes.size(); i++) {
    for (int j = 0; j < primes.size(); j++) {
      int sum = primes[i] + primes[j];
      if (sum >= M) break;
      s[sum] = make_pair(primes[i], primes[j]);
    }
  }
  int n;
  cin >> n;
  for (int ans = n;; ans--) {
    if (isPrime(ans) && s[n - ans].first != -1) {
      int cnt =
          (s[n - ans].first > 0 ? 1 : 0) + (s[n - ans].second > 0 ? 1 : 0) + 1;
      cout << cnt << endl;
      cout << ans << " ";
      if (s[n - ans].first > 0) cout << s[n - ans].first << " ";
      if (s[n - ans].second > 0) cout << s[n - ans].second << " ";
      return 0;
    }
  }
  return -1;
  return 0;
}
