#include <bits/stdc++.h>
using namespace std;
long long int kol[500010];
vector<pair<long long int, long long int> > vec;
struct zp {
  long long int zn, num, ans;
};
bool cmp(const zp &a, const zp &b) { return a.zn < b.zn; }
bool cmp1(const zp &a, const zp &b) { return a.num < b.num; }
long long int used[500000];
long long int tree[2000000];
void build(long long int tl, long long int tr, long long int num) {
  if (tl + 1 == tr) {
    tree[num] = used[tl];
    return;
  }
  long long int m = (tl + tr) / 2;
  build(tl, m, 2 * num);
  build(m, tr, 2 * num + 1);
  tree[num] = tree[2 * num] + tree[2 * num + 1];
}
void change(long long int tl, long long int tr, long long int i,
            long long int num) {
  if (tl > i || tr <= i) {
    return;
  }
  if (tl + 1 == tr) {
    tree[num]++;
    return;
  }
  long long int m = (tl + tr) / 2;
  change(tl, m, i, 2 * num);
  change(m, tr, i, 2 * num + 1);
  tree[num] = tree[2 * num] + tree[2 * num + 1];
}
long long int kpor(long long int tl, long long int tr, long long int k,
                   long long int num) {
  if (tl + 1 == tr) {
    return tl;
  }
  long long int m = (tl + tr) / 2;
  if (tree[2 * num] >= k) {
    return kpor(tl, m, k, 2 * num);
  } else {
    return kpor(m, tr, k - tree[2 * num], 2 * num + 1);
  }
}
vector<zp> zapr;
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  long long int n, m, q;
  cin >> n >> m >> q;
  long long int max1 = 0;
  for (int d = 0; d < n; d++) {
    long long int a;
    cin >> a;
    a--;
    kol[a]++;
  }
  for (int d = 0; d < m; d++) {
    pair<long long int, long long int> p = {kol[d], d};
    vec.push_back(p);
    max1 = max(max1, kol[d]);
  }
  long long int sum = 0;
  for (int d = 0; d < m; d++) {
    sum += max1 - kol[d];
  }
  long long int end1 = n + 1 + sum;
  sort(vec.begin(), vec.end());
  mt19937 gen1(time(0));
  for (int d = 0; d < q; d++) {
    zp z;
    z.num = d;
    long long int a = gen1();
    cin >> a;
    z.zn = a;
    zapr.push_back(z);
  }
  sort(zapr.begin(), zapr.end(), cmp);
  long long int tek = n, tek1 = 0;
  long long int k1 = 1;
  while (k1 <= m) {
    k1 *= 2;
  }
  build(0, k1, 1);
  change(0, k1, vec[0].second, 1);
  long long int leng1 = 1;
  for (int d1 = 0; d1 < zapr.size(); d1++) {
    long long int a = zapr[d1].zn;
    long long int a1 = a;
    if (a < end1) {
      a -= tek;
      long long int sum = 0;
      for (int d = tek1; d < vec.size() - 1; d++) {
        if ((d + 1) * (vec[d + 1].first - vec[d].first) >= a) {
          zapr[d1].ans = kpor(0, k1, ((a - 1) % leng1) + 1, 1) + 1;
          tek1 = d;
          break;
        } else {
          a -= (d + 1) * (vec[d + 1].first - vec[d].first);
          change(0, k1, vec[d + 1].second, 1);
          leng1++;
          tek += (d + 1) * (vec[d + 1].first - vec[d].first);
        }
      }
    } else {
      zapr[d1].ans = (a - end1) % m + 1;
    }
  }
  sort(zapr.begin(), zapr.end(), cmp1);
  for (int d = 0; d < zapr.size(); d++) {
    cout << zapr[d].ans << "\n";
  }
}
