#include <bits/stdc++.h>
using namespace std;
struct node {
  int id;
  long long q;
};
bool cmp(node a, node b) { return a.q < b.q; }
node rr[500010];
int ans[500010];
int s[500010 * 5];
int a[500010];
vector<int> e[500010];
void update(int l, int r, int tt, int k) {
  if (l == r) {
    s[tt]++;
    return;
  }
  int mid = (l + r) / 2;
  if (mid < k)
    update(mid + 1, r, tt * 2 + 1, k);
  else
    update(l, mid, tt * 2, k);
  s[tt] = s[tt * 2] + s[tt * 2 + 1];
}
int query(int l, int r, int tt, int k) {
  if (l == r) return l;
  int mid = (l + r) / 2;
  if (s[tt * 2] < k)
    return query(mid + 1, r, tt * 2 + 1, k - s[tt * 2]);
  else
    return query(l, mid, tt * 2, k);
}
int main() {
  int n, m, q, x;
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    a[x]++;
  }
  long long st = n + 1;
  int sz = 0;
  for (int i = 1; i <= m; i++) {
    e[a[i]].push_back(i);
    st = min((long long)a[i], st);
  }
  sz = e[st].size();
  for (int i = 0; i < e[st].size(); i++) {
    update(1, m, 1, e[st][i]);
  }
  long long y, pre = n;
  for (int i = 1; i <= q; i++) {
    scanf("%lld", &y);
    rr[i].id = i;
    rr[i].q = y;
  }
  sort(rr + 1, rr + 1 + q, cmp);
  for (int i = 1; i <= q; i++) {
    long long y = rr[i].q - pre;
    if (st > n) {
      ans[rr[i].id] = (y - 1) % m + 1;
    } else {
      while (y > sz && st <= n) {
        y -= sz;
        pre += sz;
        st++;
        sz += e[st].size();
        for (int j = 0; j < e[st].size(); j++) {
          update(1, m, 1, e[st][j]);
        }
      }
      if (st > n) {
        ans[rr[i].id] = (y - 1) % m + 1;
      } else
        ans[rr[i].id] = query(1, m, 1, y);
    }
  }
  printf("\n");
  for (int i = 1; i <= q; i++) printf("%d\n", ans[i]);
  return 0;
}
