#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
void pri(long long t) { cerr << t; }
void pri(string t) { cerr << t; }
void pri(char t) { cerr << t; }
void pri(long double t) { cerr << t; }
void pri(double t) { cerr << t; }
void pri(unsigned long long t) { cerr << t; }
template <class T, class V>
void pri(pair<T, V> p);
template <class T>
void pri(vector<T> v);
template <class T>
void pri(set<T> v);
template <class T, class V>
void pri(map<T, V> v);
template <class T>
void pri(multiset<T> v);
template <class T, class V>
void pri(pair<T, V> p) {
  cerr << "{";
  pri(p.ff);
  cerr << ",";
  pri(p.ss);
  cerr << "}";
}
template <class T>
void pri(vector<T> v) {
  cerr << "[ ";
  for (T i : v) {
    pri(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T>
void pri(set<T> v) {
  cerr << "[ ";
  for (T i : v) {
    pri(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T>
void pri(multiset<T> v) {
  cerr << "[ ";
  for (T i : v) {
    pri(i);
    cerr << " ";
  }
  cerr << "]";
}
template <class T, class V>
void pri(map<T, V> v) {
  cerr << "[ ";
  for (auto i : v) {
    pri(i);
    cerr << " ";
  }
  cerr << "]";
}
signed main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long n, k, m;
  cin >> n >> k >> m;
  long long a[n];
  map<long long, long long> mp;
  long long mxi = -1;
  long long f = 0;
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
    mp[a[i] % m]++;
    if (mp[a[i] % m] > mxi) {
      mxi = mp[a[i] % m];
      f = a[i] % m;
    }
  }
  if (mxi == 1 and k > 1) {
    cout << "No\n";
    return 0;
  }
  sort(a, a + n);
  vector<long long> ans;
  for (long long i = 0; i < n; i++) {
    long long d = a[i] % m;
    if (mp[d] == mxi and d == f) {
      ans.push_back(a[i]);
      if (ans.size() == k) {
        break;
      }
    }
  }
  if (ans.size() < k) {
    cout << "No\n";
    return 0;
  }
  cout << "Yes\n";
  for (auto i : ans) {
    cout << i << " ";
  }
}
