#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static char now[1 << 16], *S, *T;
  if (T == S) {
    T = (S = now) + fread(now, 1, 1 << 16, stdin);
    if (T == S) return EOF;
  }
  return *S++;
}
inline long long read() {
  register long long x = 0, f = 1;
  char ch = gc();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = gc();
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + ch - '0';
    ch = gc();
  }
  return (f == 1) ? x : -x;
}
struct node {
  long long l, r, sz, rd, w;
} g[1200001];
inline void pushup(long long rt) {
  g[rt].sz = g[g[rt].l].sz + g[g[rt].r].sz + 1;
}
long long tot;
inline long long news(long long w) {
  g[++tot].sz = 1;
  g[tot].w = w;
  g[tot].rd = rand();
  g[tot].l = g[tot].r = 0;
  return tot;
}
void split(long long rt, long long &a, long long &b, long long w) {
  if (!rt) return (void)(a = b = 0);
  if (g[rt].w <= w) {
    a = rt;
    split(g[a].r, g[a].r, b, w);
    pushup(a);
  } else {
    b = rt;
    split(g[b].l, a, g[b].l, w);
    pushup(b);
  }
}
long long merge(long long a, long long b) {
  if (a * b == 0) return a + b;
  if (g[a].rd <= g[b].rd) {
    g[a].r = merge(g[a].r, b);
    pushup(a);
    return a;
  } else {
    g[b].l = merge(a, g[b].l);
    pushup(b);
    return b;
  }
}
long long root;
inline void insert(long long w) {
  long long a = 0, b = 0, c = 0;
  split(root, a, b, w);
  root = merge(merge(a, news(w)), b);
}
inline long long rank_x(long long rt, long long ra) {
  while (rt) {
    if (g[g[rt].l].sz + 1 == ra)
      return g[rt].w;
    else if (g[g[rt].l].sz + 1 > ra)
      rt = g[rt].l;
    else
      ra -= g[g[rt].l].sz + 1, rt = g[rt].r;
  }
  return -1;
}
struct QUE {
  long long id, pos, opt, wht;
} q[2000001];
long long ans[1000001], n, m, Q, qcnt;
inline bool cmp(QUE a, QUE b) {
  if (a.pos == b.pos) return a.opt < b.opt;
  return a.pos < b.pos;
}
long long sum[1000001];
signed main() {
  n = read(), m = read(), Q = read();
  for (long long i = 1; i <= n; i++) {
    sum[read()]++;
  }
  for (long long i = 1; i <= m; i++) {
    q[++qcnt].opt = 2;
    q[qcnt].pos = sum[i];
    q[qcnt].id = i;
  }
  sort(q + 1, q + 1 + qcnt, cmp);
  long long SUM = 0;
  for (long long i = 1; i <= m; i++) {
    SUM += sum[q[i].id];
    q[i].pos = sum[q[i].id] * i - SUM;
  }
  sort(q + 1, q + 1 + qcnt, cmp);
  for (long long i = 1; i <= Q; i++) {
    long long sb = read() - n;
    q[++qcnt].id = i;
    q[qcnt].pos = sb;
    q[qcnt].opt = 1;
    q[qcnt].wht = sb;
  }
  sort(q + m + 1, q + qcnt + 1, cmp);
  long long tmp = 0;
  for (long long i = m + 1; i <= qcnt; i++) {
    long long sb = q[i].wht;
    while (tmp < m && q[tmp + 1].pos < sb) tmp++;
    q[i].wht = ((sb - q[tmp].pos) % tmp ? (sb - q[tmp].pos) % tmp : tmp);
  }
  sort(q + 1, q + 1 + qcnt, cmp);
  for (long long i = 1; i <= qcnt; i++) {
    if (q[i].opt == 1) {
      ans[q[i].id] = rank_x(root, q[i].wht);
    } else {
      insert(q[i].id);
    }
  }
  for (long long i = 1; i <= Q; i++) printf("%lld\n", ans[i]);
  return 0;
}
