#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5, mod = 1e9 + 7;
int n, Q, m, a[N], c[N];
struct node {
  int op, l, r;
} b[N];
int calc(int i, int x) {
  if (i == 0) return a[x];
  int op = b[i].op, le = b[i].l, rg = b[i].r;
  if (x >= le && x <= rg) {
    if (op == 1) {
      int cur = x - 1;
      if (cur < le) cur = rg;
      return calc(i - 1, cur);
    } else {
      int dif = x - le;
      return calc(i - 1, rg - dif);
    }
  } else
    return calc(i - 1, x);
}
int main() {
  scanf("%d%d%d", &n, &Q, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= Q; i++) scanf("%d%d%d", &b[i].op, &b[i].l, &b[i].r);
  for (int i = 1; i <= m; i++) scanf("%d", &c[i]);
  for (int i = 1; i <= m; i++) printf("%d ", calc(Q, c[i]));
  return 0;
}
