Problem: Little Victor adores the sets theory. Let us remind you that a set is a group of numbers where all numbers are pairwise distinct. Today Victor wants to find a set of integers S that has the following properties:

  * for all x <image> the following inequality holds l ≤ x ≤ r; 
  * 1 ≤ |S| ≤ k; 
  * lets denote the i-th element of the set S as si; value <image> must be as small as possible. 



Help Victor find the described set.

Input

The first line contains three space-separated integers l, r, k (1 ≤ l ≤ r ≤ 1012; 1 ≤ k ≤ min(106, r - l + 1)).

Output

Print the minimum possible value of f(S). Then print the cardinality of set |S|. Then print the elements of the set in any order.

If there are multiple optimal sets, you can print any of them.

Examples

Input

8 15 3


Output

1
2
10 11


Input

8 30 7


Output

0
5
14 9 28 11 16

Note

Operation <image> represents the operation of bitwise exclusive OR. In other words, it is the XOR operation.

Solution (in JAVA):

Solution:
import java.io.OutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.InputMismatchException;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 * @author George Marcus
 */
public class Main {
	public static void main(String[] args) {
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		InputReader in = new InputReader(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		TaskD solver = new TaskD();
		solver.solve(1, in, out);
		out.close();
	}
}

class TaskD {
    public void solve(int testNumber, InputReader in, PrintWriter out) {
        long L = in.nextLong();
        long R = in.nextLong();
        int K = in.nextInt();

        long ans = L;
        int num = 1;
        long[] A = { L, -1, -1, -1 };

        if (K > 1) {
            for (long i = L; i + 1 <= R && i <= L + 3; i++) {
                long crt = i ^ (i + 1);
                if (crt < ans) {
                    ans = crt;
                    num = 2;
                    A[0] = i;
                    A[1] = i + 1;
                }
            }
        }

        if (K > 2) {
            for (int i = 0; i < 60; i++) {
                for (int j = 0; j < i; j++) {
                    long a = (1L << i) | (1L << j);
                    long fill = (1L << j) - 1;
                    long b = (1L << i) | fill;
                    long c = (1L << j) | fill;
                    if (ok(L, R, a) && ok(L, R, b) && ok(L, R, c)) {
                        long crt = a ^ b ^ c;
                        if (crt < ans) {
                            ans = crt;
                            num = 3;
                            A[0] = a;
                            A[1] = b;
                            A[2] = c;
                        }
                    }
                }
            }
        }

        if (K > 3) {
            for (long i = L; i + 3 <= R && i <= L + 3; i++) {
                long crt = i ^ (i + 1) ^ (i + 2) ^ (i + 3);
                if (crt < ans) {
                    ans = crt;
                    num = 4;
                    A[0] = i;
                    A[1] = i + 1;
                    A[2] = i + 2;
                    A[3] = i + 3;
                }
            }
        }

        out.println(ans);
        out.println(num);
        for (int i = 0; i < num; i++) {
            out.print(A[i] + " ");
        }
        out.println();
    }

    private boolean ok(long L, long R, long A) {
        return L <= A && A <= R;
    }
}

class InputReader {
    private InputStream stream;
    private byte[] buf = new byte[1024];
    private int curChar;
    private int numChars;

    public InputReader(InputStream stream) {
        this.stream = stream;
    }

    public int read() {
        if (numChars == -1)
            throw new InputMismatchException();
        if (curChar >= numChars) {
            curChar = 0;
            try {
                numChars = stream.read(buf);
            } catch (IOException e) {
                throw new InputMismatchException();
            }
            if (numChars <= 0)
                return -1;
        }
        return buf[curChar++];
    }

    public int nextInt() {
        return Integer.parseInt(nextString());
    }

    public long nextLong() {
        return Long.parseLong(nextString());
    }

    public String nextString() {
        int c = read();
        while (isSpaceChar(c))
            c = read();
        StringBuffer res = new StringBuffer();
        do {
            res.appendCodePoint(c);
            c = read();
        } while (!isSpaceChar(c));

        return res.toString();
    }

    private boolean isSpaceChar(int c) {
        return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
    }

}