#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 41;
const int mod = 1e9 + 7;
const long long INF = 1e16;
const int inf = 2e9;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int a[N];
struct item {
  int cnt, prior, val;
  bool rev;
  item *l, *r;
  item() {
    val = -1;
    prior = uniform_int_distribution<int>(0, inf)(rng);
    cnt = 1;
    rev = 0;
    l = r = NULL;
  }
  item(int val) : val(val) {
    prior = uniform_int_distribution<int>(0, inf)(rng);
    cnt = 1;
    rev = 0;
    l = r = NULL;
  }
} * t;
typedef item* node;
int cnt(node t) { return t ? t->cnt : 0; }
void upd_cnt(node t) {
  if (!t) return;
  t->cnt = 1 + cnt(t->l) + cnt(t->r);
}
void push(node t) {
  if (t && t->rev) {
    t->rev = 0;
    swap(t->l, t->r);
    if (t->l) t->l->rev ^= 1;
    if (t->r) t->r->rev ^= 1;
  }
}
void mrg(node& t, node l, node r) {
  push(l);
  push(r);
  if (!l || !r)
    t = l ? l : r;
  else if (l->prior > r->prior)
    mrg(l->r, l->r, r), t = l;
  else
    mrg(r->l, l, r->l), t = r;
  upd_cnt(t);
}
void split(node t, node& l, node& r, int key, int add = 0) {
  if (!t) return void(l = r = 0);
  push(t);
  int cur_key = add + cnt(t->l);
  if (key <= cur_key)
    split(t->l, l, t->l, key, add), r = t;
  else
    split(t->r, t->r, r, key, add + 1 + cnt(t->l)), l = t;
  upd_cnt(t);
}
void rvrs(node& t, int l, int r) {
  node t1, t2, t3;
  split(t, t1, t2, l);
  split(t2, t2, t3, r - l + 1);
  t2->rev ^= 1;
  mrg(t, t1, t2);
  mrg(t, t, t3);
}
void output(node t) {
  if (!t) return;
  push(t);
  output(t->l);
  cout << t->val << " ";
  output(t->r);
}
void cycle(node& t, int l, int r) {
  node t1, t2, t3, t4;
  split(t, t1, t2, l);
  split(t2, t2, t4, r - l);
  split(t4, t3, t4, 1);
  mrg(t, t1, t3);
  mrg(t, t, t2);
  mrg(t, t, t4);
}
int get(node t, int pos) {
  node t1, t2, t3;
  split(t, t1, t2, pos);
  split(t2, t2, t3, 1);
  int res = t2->val;
  mrg(t, t1, t2);
  mrg(t, t, t3);
  return res;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL);
  ;
  int n, q, m;
  cin >> n >> q >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
    mrg(t, t, new item(a[i]));
  }
  while (q--) {
    int tq, l, r;
    cin >> tq >> l >> r;
    if (tq == 1)
      cycle(t, l - 1, r - 1);
    else
      rvrs(t, l - 1, r - 1);
  }
  while (m--) {
    int pos;
    cin >> pos;
    cout << get(t, pos - 1) << " ";
  }
}
