#include <bits/stdc++.h>
using namespace std;
bool primes[10000000];
vector<int> pr;
bool primo(long long n) {
  if (n == 1) return false;
  for (int i = 0; i < (int)pr.size(); ++i) {
    while (n % pr[i] == 0) {
      return false;
    }
  }
  return true;
}
int main() {
  memset(primes, true, sizeof primes);
  primes[0] = false;
  primes[1] = false;
  primes[2] = true;
  for (int i = 2; i < 10000000; i++) {
    if (primes[i]) {
      pr.push_back(i);
      for (int k = 1; i * k < 10000000; k++) {
        primes[i * k] = false;
      }
    }
  }
  int n;
  while (cin >> n) {
    if (n == 3)
      cout << "1\n3" << endl;
    else if (n == 5)
      cout << "2\n3 2\n";
    else {
      n -= 3;
      cout << "3\n3 ";
      for (int i = 0; i < (int)pr.size(); i++) {
        int ppp = n - pr[i];
        if (binary_search(pr.begin(), pr.end(), ppp)) {
          cout << pr[i] << ' ' << ppp << endl;
          return 0;
        } else if (primo(ppp)) {
          cout << pr[i] << ' ' << ppp << endl;
          return 0;
        }
      }
    }
  }
}
