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 CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const long long L1 = ((long long)(1));
long long L, R, K;
bool check(long long start) {
  long long end = start + 3;
  if (end > R) return false;
  long long sum = 0;
  for (long long i = start; i <= end; ++i) sum ^= i;
  if (sum == 0) {
    cout << sum << endl;
    cout << 4 << endl;
    bool flag = false;
    for (long long i = start; i <= end; ++i) {
      if (flag) cout << " ";
      flag = true;
      cout << i;
    }
    cout << endl;
    return true;
  }
  return false;
}
bool gao4() {
  if (K < 4) return false;
  long long add = L % 4;
  if (add) add = 4 - add;
  long long start = L + add;
  for (long long i = L; i <= start; ++i)
    if (check(i)) return true;
  return false;
}
bool gao3() {
  if (K < 3) return false;
  for (int i = 0; i < 40; ++i)
    for (int j = i + 1; j < 40; ++j) {
      long long num0 = (L1 << j) + (L1 << i);
      if (num0 < L || num0 > R) continue;
      long long num1 = num0 - 1;
      if (num1 < L || num1 > R) continue;
      long long num2 = (L1 << (i + 1)) - 1;
      if (num2 < L || num2 > R) continue;
      cout << 0 << endl;
      cout << 3 << endl;
      cout << num0 << " " << num1 << " " << num2 << endl;
      return true;
    }
  return false;
}
bool gao2() {
  if (K < 2) return false;
  long long start = L;
  if (start & 1) ++start;
  long long end = start + 1;
  if (end > R) return false;
  cout << 1 << endl;
  cout << 2 << endl;
  cout << start << " " << end << endl;
}
void solve() {
  if (gao4()) return;
  if (gao3()) return;
  if (gao2()) return;
  if (K > 1 && (L ^ R) < L) {
    cout << (L ^ R) << endl;
    cout << 2 << endl;
    cout << L << " " << R << endl;
    return;
  }
  cout << L << endl;
  cout << 1 << endl;
  cout << L << endl;
}
int main() {
  while (cin >> L >> R >> K) {
    solve();
  }
  return 0;
}