#include <bits/stdc++.h>
using namespace std;
struct Node {
  Node *l, *r;
  int val, pri, sz;
  char tag;
  Node() : l(NULL), r(NULL), pri(rand()), sz(1), tag(0) {}
  int size(Node *x) { return x ? x->sz : 0; }
  void pull() { sz = size(l) + size(r) + 1; }
  void push() {
    if (tag & 1) {
      tag ^= 1;
      if (l) l->tag ^= 1;
      if (r) r->tag ^= 1;
      swap(l, r);
    }
  }
};
int ans[200007];
int tot = 0;
typedef pair<Node *, Node *> loli;
int size(Node *x) { return x ? x->sz : 0; }
Node *merge(Node *a, Node *b) {
  if (!a) return b;
  if (!b) return a;
  if (a) a->push();
  if (b) b->push();
  if (a->pri > b->pri) {
    a->r = merge(a->r, b);
    a->pull();
    return a;
  } else {
    b->l = merge(a, b->l);
    b->pull();
    return b;
  }
}
loli splt(Node *s, int k) {
  if (!s) return {NULL, NULL};
  loli ret;
  s->push();
  if (size(s->l) >= k) {
    ret = splt(s->l, k);
    s->l = ret.second;
    s->pull();
    ret.second = s;
    return ret;
  } else {
    ret = splt(s->r, k - size(s->l) - 1);
    s->r = ret.first;
    s->pull();
    ret.first = s;
    return ret;
  }
}
void insert(Node *&x, int i) {
  if (!x) {
    x = new Node;
    x->val = i;
    return;
  }
  Node *y = new Node;
  y->val = i;
  x = merge(x, y);
  return;
}
void dfs(Node *x) {
  if (!x) return;
  x->push();
  dfs(x->l);
  ans[tot++] = x->val;
  dfs(x->r);
}
void shift(Node *&s, int l, int r) {
  Node *a, *b, *c;
  loli tmp;
  tmp = splt(s, l - 1);
  a = tmp.first;
  tmp = splt(tmp.second, r - l + 1);
  b = tmp.first;
  c = tmp.second;
  tmp = splt(b, size(b) - 1);
  b = merge(tmp.second, tmp.first);
  a = merge(a, b);
  a = merge(a, c);
  s = a;
}
void rotate(Node *&s, int l, int r) {
  Node *a, *b, *c;
  loli tmp;
  tmp = splt(s, l - 1);
  a = tmp.first;
  tmp = splt(tmp.second, r - l + 1);
  b = tmp.first;
  c = tmp.second;
  if (b) b->tag ^= 1;
  a = merge(a, b);
  a = merge(a, c);
  s = a;
  return;
}
int main() {
  int n, m, a, l, r, tmp, o;
  scanf("%d%d%d", &n, &m, &a);
  Node *root = NULL;
  for (int i = 0; i < n; i++) {
    scanf("%d", &tmp);
    insert(root, tmp);
  }
  while (m--) {
    scanf("%d%d%d", &o, &l, &r);
    if (o == 2) {
      rotate(root, l, r);
    } else {
      shift(root, l, r);
    }
  }
  tot = 0;
  dfs(root);
  for (int i = 0; i < a; i++) scanf("%d", &o), printf("%d ", ans[o - 1]);
  return 0;
}
