#include <bits/stdc++.h>
void _print() {}
template <typename T, typename... V>
void _print(T t, V... v) {
  std::cerr << t;
  if (sizeof...(v)) {
    std::cerr << ", ";
    _print(v...);
  }
}
using namespace std;
class Treap {
  struct node {
    long long key, priority, cnt;
    bool rev;
    node *l, *r;
    node(long long k) {
      key = k, priority = rand();
      cnt = 1;
      l = r = 0;
      rev = 0;
    }
  };
  typedef node *pnode;

 private:
  pnode root = 0;

 private:
  long long cnt(pnode nd) { return nd ? nd->cnt : 0; }
  void upd_cnt(pnode nd) {
    if (nd) nd->cnt = cnt(nd->l) + cnt(nd->r) + 1;
  }
  void push(pnode nd) {
    if (nd && nd->rev) {
      nd->rev = 0;
      swap(nd->l, nd->r);
      if (nd->l) nd->l->rev ^= 1;
      if (nd->r) nd->r->rev ^= 1;
    }
  }
  void merge(pnode &t, pnode l, pnode r) {
    push(l), push(r);
    if (!l || !r)
      t = l ? l : r;
    else if (l->priority > r->priority)
      merge(l->r, l->r, r), t = l;
    else
      merge(r->l, l, r->l), t = r;
    upd_cnt(t);
  }
  void split(pnode t, pnode &l, pnode &r, long long key, long long add = 0) {
    push(t);
    if (!t) return void(l = r = 0);
    long long 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 print(pnode nd) {
    if (!nd) return;
    print(nd->l);
    cout << nd->key << " ";
    print(nd->r);
  }

 public:
  void insert(long long idx, long long key) {
    pnode nd = new node(key);
    pnode t1, t2;
    split(root, t1, t2, idx);
    merge(t1, t1, nd);
    merge(root, t1, t2);
  }
  long long get(long long i) {
    pnode l, r, x, nr;
    split(root, l, r, i);
    split(r, x, nr, 1);
    merge(root, l, x);
    merge(root, root, nr);
    return x->key;
  }
  void erase(long long i) {
    pnode l, r, x, nr;
    split(root, l, r, i);
    split(r, x, nr, 1);
    merge(root, l, nr);
  }
  void shift(long long l, long long r) {
    long long k = get(r);
    erase(r);
    insert(l, k);
  }
  void reverse(long long l, long long r) {
    pnode a, b, c;
    split(root, b, c, r + 1, 0);
    split(b, a, b, l, 0);
    if (b) b->rev = 1;
    merge(b, a, b);
    merge(root, b, c);
  }
  void print() {
    print(root);
    cout << endl;
  }
};
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr), cout.tie(nullptr);
  Treap T;
  long long n, q, m;
  cin >> n >> q >> m;
  for (long long i = 0; i < n; i++) {
    long long a;
    cin >> a;
    T.insert(i, a);
  }
  for (long long i = 0; i < q; i++) {
    long long type, l, r;
    cin >> type >> l >> r;
    --l, --r;
    if (type == 1) T.shift(l, r);
    if (type == 2) T.reverse(l, r);
  }
  for (long long i = 0; i < m; i++) {
    long long b;
    cin >> b;
    --b;
    cout << T.get(b) << " ";
  }
  cout << endl;
  return 0;
}
