#include <bits/stdc++.h>
using namespace std;
const int N = 200 * 1000 + 5;
struct query {
  int l, r, t;
  void setQuery(int ll, int rr, int tt) {
    l = ll;
    r = rr;
    t = tt;
  }
};
query arr[N];
int n, q, m, val[N], x, y, z;
int main() {
  scanf("%d %d %d", &n, &q, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", (val + i));
  }
  for (int i = 1; i <= q; i++) {
    scanf("%d %d %d", &x, &y, &z);
    arr[i].setQuery(y, z, x);
  }
  reverse(arr + 1, arr + 1 + q);
  while (m--) {
    scanf("%d", &x);
    for (int i = 1; i <= q; i++) {
      if (arr[i].t == 1) {
        if (x >= arr[i].l and x <= arr[i].r) {
          if (x == arr[i].l) {
            x = arr[i].r;
          } else {
            x--;
          }
        }
      } else {
        if (x >= arr[i].l and x <= arr[i].r) {
          x = arr[i].r - x + arr[i].l;
        }
      }
    }
    printf("%d ", val[x]);
  }
  return 0;
}
