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;
struct _ {
  _() { ios_base::sync_with_stdio(0); }
} _;
template <class A, class B>
ostream &operator<<(ostream &o, pair<A, B> t) {
  o << "(" << t.first << ", " << t.second << ")";
  return o;
}
template <class T>
string tostring(T first, int len = 0, char c = '0') {
  stringstream ss;
  ss << first;
  string r = ss.str();
  if (r.length() < len) r = string(len - r.length(), c) + r;
  return r;
}
template <class T>
void PV(T a, T b, int n = 0, int w = 0, string s = " ") {
  int c = 0;
  while (a != b) {
    cout << tostring(*a++, w, ' ');
    if (a != b && (n == 0 || ++c % n))
      cout << s;
    else
      cout << "\n";
    cout.flush();
  }
}
template <class T>
inline bool chmin(T &a, T b) {
  return a > b ? a = b, 1 : 0;
}
template <class T>
inline bool chmax(T &a, T b) {
  return a < b ? a = b, 1 : 0;
}
const long long linf = 0x3f3f3f3f3f3f3f3fLL;
const int inf = 0x3f3f3f3f;
const int mod = int(1e9) + 7;
const int N = 111111;
int main() {
  long long l, r, k;
  cin >> l >> r >> k;
  if (r - l < 10) {
    int n = r - l + 1;
    long long minv = linf, pi = -1;
    for (int i = 0; i < 1 << n; i++) {
      int cnt = 0;
      long long xr = 0;
      for (int j = 0; j < n; j++) {
        if (i >> j & 1) {
          cnt++;
          xr ^= l + j;
        }
      }
      if (1 <= cnt && cnt <= k && chmin(minv, xr)) pi = i;
    }
    vector<long long> r;
    for (int i = 0; i < n; i++)
      if (pi >> i & 1) r.push_back(l + i);
    cout << minv << endl;
    cout << r.size() << endl;
    PV((r).begin(), (r).end());
  } else {
    if (k == 1) {
      cout << l << endl;
      cout << 1 << endl;
      cout << l << endl;
    } else if (k == 2 || k == 3) {
      long long pi = l, pj = l + 1;
      if ((pi ^ pj) > 1) pi++, pj++;
      int cl = 0, rl = 0;
      while (l >> cl) cl++;
      while (r >> rl) rl++;
      if (k == 2 || cl == rl) {
        cout << 1 << endl;
        cout << 2 << endl;
        cout << pi << " " << pj << endl;
      } else {
        long long R = r - (1LL << (rl - 1));
        int Rl = 0;
        while (R >> Rl) Rl++;
        long long mx = (1LL << (Rl)) - 1;
        if (mx < l) {
          cout << 1 << endl;
          cout << 2 << endl;
          cout << pi << " " << pj << endl;
        } else {
          cout << 0 << endl;
          cout << 3 << endl;
          long long A = r;
          long long B = mx ^ A;
          long long C = A ^ B;
          cout << A << " " << B << " " << C << endl;
        }
      }
    } else if (k >= 4) {
      for (long long i = l; i + 3 <= r; i++) {
        if ((i ^ (i + 1) ^ (i + 2) ^ (i + 3)) == 0) {
          cout << 0 << endl;
          cout << 4 << endl;
          cout << i << " " << i + 1 << " " << i + 2 << " " << i + 3 << endl;
          break;
        }
      }
    }
  }
  return 0;
}