#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:256000000")
template <class T>
T sqr(T a) {
  return a * a;
}
vector<int> p;
void precalc(int n) {
  vector<int> was(n + 1, 0);
  for (int i = 2; i < n; ++i) {
    if (!was[i]) p.push_back(i);
    for (int j = i; j < n; j += i) was[j] = 1;
  }
}
bool isPrime(int n) {
  for (int i = 2; i * i <= n; ++i) {
    if (!(n % i)) return 0;
  }
  return 1;
}
int main() {
  int n;
  cin >> n;
  precalc(min(n + 1, 1 << 17));
  if (isPrime(n)) {
    cout << 1 << endl;
    cout << n << endl;
    return 0;
  }
  int t = 0;
  for (int i = 0; i < 400 && t < 10000; ++t) {
    int p1 = p[rand() % (int)(p).size()];
    int p2 = p[rand() % (int)(p).size()];
    int k = n - p1 - p2;
    if (k <= 1) continue;
    ++i;
    if (isPrime(k)) {
      cout << 3 << endl;
      cout << p1 << " " << p2 << " " << k << endl;
      return 0;
    }
  }
  return 0;
}
