
import java.io.*;

/**
 * 
 * @author Ferner Cilloniz Bicchi
 *
 */

final class Main
{
   static byte[] primesList = new byte[10000001];	// use this to store our previously compute primes and nonprimes
   
	public static void main(String[] args)
	{	
		int number;	// inputted number
		
		// loop while there is still data to be read
		while( (number = readLine()) != -1 ) {
			
			// we cant express any number less than 8 as the sum of 4 primes
			if( number < 8) {
				System.out.println("Impossible.");
				continue;
			}
			
			// store here the outstring
			StringBuffer output = new StringBuffer();
			
			if( (number & 1) == 0) {	// we know 2 primes of this are 2 and 2
				number -= 4;		// subtract 4 from number because 2 and 4 are in it
				output.append("2 2");	// prepare output
			}
			else {					// we know the 2 and 3 are in here
				number -= 5;		// subtract 5 from number because 2 and 3 are in it
				output.append("2 3");
			}
			
			// this is a special case. because we know that 2 is prime, if number - 2 is also prime then we have found our 4 primes.
			if( isPrime(number - 2) ) {
				System.out.println(output.toString() + " " + 2 + " " + (number - 2));
				continue;
			}
			
			// loop only using odd numbers, because the only even prime is 2 and we already tested for it
			for(int i = 3; i < 10000000; i += 2) {
				
				int newNumber = number - i;	
				
				// if i and (number - i) are prime, then we have found our 4 prime numbers
				if( isPrime(i) && isPrime(newNumber) ) {
					System.out.println(output.toString() + " " + i + " " + newNumber);
					break;
				}

			}

		}
		
	}
	
	/**
	 * O(1) in space, O(n) in time<br>
	 * Check to see if a number is prime or not.
	 * @param n The number to check.
	 * @return true if n is prime, false otherwise.
	 */
	private static boolean isPrime(int n)
	{
		// test for special cases
		// also, test to see if n is one for the first few primes.
		if( primesList[n] == 1 || n == 2 || n == 3 || n == 5 || n == 7 || n == 11 || n == 13 || n == 17 || n == 19 || n == 23)
			return true;
		
		// have we already determined if n is composite?
		if(primesList[n] == -1)
			return false;
		
		// all even numbers, minus 2, are composite. So return false.
		if( (n & 1) == 0) {
			primesList[n] = -1;	// mark n as non-prime
			return false;
		}
		
		// prepare to brute force the number
		int limit = (int)Math.sqrt(n);

		// loop only using odd numbers, all even were take out when checking to see if n was divisible by 2
		for(int i = 3; i <= limit; i += 2)
			if( (n % i) == 0) {	// if it is divisible, then mark as non-prime and return false
				primesList[n] = -1;
				return false;
			}
	
		// n has passed all the tests, so mark as prime and return true.
		primesList[n] = 1;
		return true;
	}

	/**
	 * O(1) in space, O(n) in time<br>
	 * Read a number frmo STDIN (System.in)
	 * @return An integer read from the keyboard
	 */
    private static int readLine() 
    {
        int i = 0;	// the character returned from System.in
        int number = 0;	// the number we will return
        
        try 
        {
        	while( ((i = System.in.read()) != '\n') && (i != -1) ) // loop until newline or EOF
        		if (i != '\r') {
                	number <<= 1;	// number = number * 10; // this is so we shift the number to the left
                	number *= 5;    //
                	number = number + i - 48; // we must add the next read number and substract 48 to not get its ASCII value
        		}
        	
        	if(i == -1)		// have we reach an EOF?
        		return -1;
        	
        } catch(IOException e) {}
        
        // return the number
        return number;
        	
    }
	
}
