#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';
}
