#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/stack:256000000")
const long double inf = 1e9;
const long double eps = 0.0001;
int main() {
  int n;
  cin >> n;
  int n1, n2, n3;
  n1 = n;
  bool ans = 0, nn1, nn2, nn3;
  vector<int> res;
  int sqr = sqrt(23.0), SQR = sqrt(2.0);
  while (!ans) {
    nn1 = 0;
    nn2 = 0;
    nn3 = 0;
    for (int i = 2; i <= sqrt((double)n1); i++) {
      if (n1 % i == 0) {
        nn1 = 1;
        break;
      }
    }
    if (n1 == 1) nn1 = 1;
    n2 = n - n1;
    int n22 = n2;
    while ((n2 >= n22 / 2 - 1 || n2 == 0) && !ans && !nn1) {
      nn2 = 0;
      nn3 = 0;
      for (int i = 2; i <= sqrt((double)n2); i++) {
        if (n2 % i == 0) {
          nn2 = 1;
          break;
        }
      }
      if (n2 == 1) nn2 = 1;
      n3 = n - n1 - n2;
      for (int i = 2; i <= sqrt((double)n3); i++) {
        if (n3 % i == 0) {
          nn3 = 1;
          break;
        }
      }
      if (n3 == 1) nn3 = 1;
      if (!nn1 && !nn2 && !nn3) {
        ans = 1;
        if (n1 != 0) res.push_back(n1);
        if (n2 != 0) res.push_back(n2);
        ;
        if (n3 != 0) res.push_back(n3);
      }
      if (n2 == 0) break;
      n2--;
    }
    if (n1 == 0) break;
    n1--;
  }
  cout << res.size() << endl;
  for (int i = 0; i < res.size(); i++) cout << res[i] << " ";
}
