#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
const long long INF = 0x3f3f3f3f3f3f3f3f;
const long long llinf = (1LL << 62);
const int inf = (1 << 30);
const int nmax = 2e5 + 50;
const int mod = 1e9 + 7;
using namespace std;
int n, m, q, l, r, tp, x, k, i;
struct nod {
  int key, sz, vl, lzy;
  long long pr;
  nod *l, *r;
  nod(int key, int vl) {
    this->key = key;
    this->vl = vl;
    this->sz = 1;
    this->lzy = 0;
    this->pr = rand();
    this->l = this->r = NULL;
  }
};
typedef nod *pnod;
pnod rt;
int sz(pnod t) { return t ? t->sz : 0; }
void upds(pnod t) {
  if (!t) return;
  t->sz = sz(t->l) + 1 + sz(t->r);
}
void push(pnod t) {
  if (!t || !t->lzy) return;
  swap(t->l, t->r);
  t->lzy = 0;
  if (t->l) t->l->lzy ^= 1;
  if (t->r) t->r->lzy ^= 1;
}
void split(pnod t, pnod &l, pnod &r, int key, int ad = 0) {
  if (!t) return void(l = r = NULL);
  push(t);
  int cur = ad + sz(t->l);
  if (key <= cur) {
    r = t;
    split(t->l, l, t->l, key, ad);
  } else {
    l = t;
    split(t->r, t->r, r, key, cur + 1);
  }
  upds(t);
}
void merge(pnod &t, pnod l, pnod r) {
  push(l), push(r);
  if (!l || !r)
    t = l ? l : r;
  else if (l->pr > r->pr) {
    t = l;
    merge(l->r, l->r, r);
  } else {
    t = r;
    merge(r->l, l, r->l);
  }
  upds(t);
}
void ers(pnod &t, int key) {
  if (!t) return;
  push(t);
  if (key == sz(t->l) + 1)
    merge(t, t->l, t->r);
  else if (key <= sz(t->l))
    ers(t->l, key);
  else
    ers(t->r, key - sz(t->l) - 1);
  upds(t);
}
int fnd(pnod t, int key) {
  if (!t) return 0;
  push(t);
  if (key == sz(t->l) + 1)
    return t->vl;
  else if (key <= sz(t->l))
    return fnd(t->l, key);
  else
    return fnd(t->r, key - sz(t->l) - 1);
}
void ins(pnod x) {
  pnod t1, t2;
  split(rt, t1, t2, x->key - 1);
  merge(t1, t1, x);
  merge(rt, t1, t2);
}
void reverse(int l, int r) {
  pnod t1, t2, t3;
  split(rt, t1, t2, l - 1);
  split(t2, t2, t3, r - l + 1);
  t2->lzy ^= 1;
  merge(rt, t1, t2);
  merge(rt, rt, t3);
}
void out(pnod t) {
  if (!t) return;
  push(t);
  out(t->l);
  cout << t->key << " ";
  out(t->r);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cerr.tie(0);
  cout.tie(0);
  srand(time(0));
  rt = NULL;
  cin >> n >> q >> m;
  for (i = 1; i <= n; i++) {
    cin >> x;
    ins(new nod(i, x));
  }
  while (q--) {
    cin >> tp >> l >> r;
    if (tp == 1) {
      k = fnd(rt, r);
      ers(rt, r);
      ins(new nod(l, k));
    } else {
      reverse(l, r);
    }
  }
  while (m--) {
    cin >> x;
    cout << fnd(rt, x) << " ";
  }
  cout << endl;
  return 0;
}
