#include <bits/stdc++.h>   using namespace std;   using namespace chrono;   struct stopwatch {     time_point<high_resolution_clock> last_tick;     bool notock = false;     void tick() { last_tick = high_resolution_clock::now(); }     void tock() const {       duration<double> dur = high_resolution_clock::now() - last_tick;       cerr <<  Time:   << dur.count() <<   n ;     }     stopwatch() { tick(); }     stopwatch(int) {       tick();       notock = true;     }     ~stopwatch() {       if (!notock) {         tock();       }     }   };   template <int m>   struct modint {     unsigned x;     modint() : x(0) {}     modint(long long arg) {       arg %= m;       if (arg < 0) {         x = arg + m;       } else {         x = arg;       }     }     modint& operator+=(const modint& other) {       x += other.x;       if (x >= m) {         x -= m;       }       return *this;     }     modint& operator*=(const modint& other) {       x = (x * 1ll * other.x) % m;       return *this;     }     modint& operator-=(const modint& other) {       x += m - other.x;       if (x >= m) {         x -= m;       }       return *this;     }     modint operator+(const modint& other) const {       modint tmp = *this;       tmp += other;       return tmp;     }     modint operator-(const modint& other) const {       modint tmp = *this;       tmp -= other;       return tmp;     }     modint operator*(const modint& other) const {       modint tmp = *this;       tmp *= other;       return tmp;     }     explicit operator int() const { return x; }     modint& operator++() {       ++x;       if (x == m) {         x = 0;       }       return *this;     }     modint& operator--() {       if (x == 0) {         x = m - 1;       } else {         --x;       }       return *this;     }     modint operator++(int) {       modint tmp = *this;       ++*this;       return tmp;     }     modint operator--(int) {       modint tmp = *this;       --*this;       return tmp;     }     bool operator==(const modint& other) const { return x == other.x; }     bool operator!=(const modint& other) const { return x != other.x; }     template <class T>     modint operator^(T arg) const {       if (arg == 0) {         return 1;       }       if (arg == 1) {         return x;       }       auto t = *this ^ (arg >> 1);       t *= t;       if (arg & 1) {         t *= *this;       }       return t;     }     template <class T>     modint operator^=(T arg) {       return *this = *this ^ arg;     }   };   const int MOD = 1051131;   const int TOT = 700752;   int m, s, n;   long long t;   valarray<modint<MOD> > a;   valarray<modint<MOD> > em_inv_slow(int m, int n,                                      const valarray<modint<MOD> >& a) {     int k = 0;     valarray<modint<MOD> > b(n);     for (int i = 0; i < m; i++) {       int w = 1 << (m - i - 1);       int c = 1 << i;       modint<MOD> mult = modint<MOD>(2) ^ (TOT - i - 1);       for (int j = 0; j < w; j++) {         modint<MOD> t = a[k] * mult;         b[slice(j + 0, c, 2 * w)] -= valarray<modint<MOD> >(t, c);         b[slice(j + w, c, 2 * w)] += valarray<modint<MOD> >(t, c);         k++;       }     }     modint<MOD> t = (modint<MOD>(2) ^ (TOT - m));     b += a[n - 1] * t;     return b;   }   void em_inv(int m, int n, valarray<modint<MOD> >& a) {     int k = 0;     valarray<long long> bll(n);     for (int i = 0; i < m; i++) {       const int w = 1 << (m - i - 1);       long long mult = (int)(modint<MOD>(2) ^ (TOT - i - 1));       for (int j0 = 0; j0 < n; j0 += w + w) {         for (int j = 0; j < w; j++) bll[j + j0] -= (int)a[k + j] * mult;         for (int j = 0; j < w; j++) bll[j + j0 + w] += (int)a[k + j] * mult;       }       k += w;     }     modint<MOD> t = (modint<MOD>(2) ^ (TOT - m)) * a[n - 1];     for (int i = 0; i < n; i++) a[i] = bll[i];     a += t;   }   valarray<modint<MOD> > em_slow(int m, int n, const valarray<modint<MOD> >& a) {     int k = 0;     valarray<modint<MOD> > b(n);     for (int i = 0; i < m; i++) {       int w = 1 << (m - i - 1);       int c = 1 << i;       for (int j = 0; j < w; j++) {         b[k] -= a[slice(j + 0, c, 2 * w)].sum();         b[k] += a[slice(j + w, c, 2 * w)].sum();         k++;       }     }     b[k++] += a.sum();     return b;   }   valarray<modint<MOD> > em(int m, int n, const valarray<modint<MOD> >& a) {     int k = 0;     valarray<modint<MOD> > b(n);     for (int i = 0; i < m; i++) {       const int w = 1 << (m - i - 1);       for (int j0 = 0; j0 < n; j0 += w + w) {         for (int j = 0; j < w; j++) b[k + j] -= a[j + j0];         for (int j = 0; j < w; j++) b[k + j] += a[j + j0 + w];       }       k += w;     }     b[k++] += a.sum();     return b;   }   valarray<modint<MOD> > eigenvals(int m, int n, long long t) {     int k = 0;     valarray<modint<MOD> > b(n);     for (int i = 0; i < m; i++) {       int w = 1 << (m - i - 1);       modint<MOD> x = 1 + (i - 1) * (n / 2);       b[slice(k, w, 1)] = x ^ t;       k += w;     }     b[k++] = modint<MOD>(1 + (n / 2) * m) ^ t;     return b;   }   void pr(const valarray<modint<MOD> >& a) {     for (modint<MOD> x : a) cerr << (int)x <<    ;     cerr <<   n ;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);     cerr.tie(nullptr);     stopwatch sw(0);     cin >> m >> t >> s;     n = 1 << m;     a.resize(n);     for (int i = 0; i < s; i++) {       int x;       cin >> x;       a[i] = x;     }     sw.tock();     for (int i = s; i < n; i++) a[i] = a[i - s] * 101 + 10007;     sw.tock();     a = em(m, n, a);     sw.tock();     {       valarray<modint<MOD> > b = eigenvals(m, n, t);       sw.tock();       for (int i = 0; i < n; i++) a[i] = a[i] * b[i];       sw.tock();     }     em_inv(m, n, a);     sw.tock();     int xr = 0;     for (modint<MOD> x : a) xr ^= (int)x;     sw.tock();     cout << xr <<   n ;   }