#include <bits/stdc++.h>
using namespace std;
struct edge {
  long long from, to, w;
  edge(long long from, long long to, long long w) : from(from), to(to), w(w) {}
  bool operator<(const edge& e) const { return (w > e.w); }
};
long long gcd(long long x, long long y) {
  if (y == 0) return x;
  return gcd(y, x % y);
}
long long fx(long long n, long long md) { return ((n % md) + md) % md; }
void O_o() {
  ios::sync_with_stdio(0);
  ios_base::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
}
int main() {
  O_o();
  int n, k, m;
  cin >> n >> k >> m;
  vector<vector<int> > adj(m + 50);
  for (int i = 0; i < int(n); i++) {
    int x;
    cin >> x;
    adj[x % m].push_back(x);
  }
  for (int i = 0; i < int(m); i++) {
    if (((int)(adj[i].size())) >= k) {
      cout << "Yes" << endl;
      for (int j = 0; j < int(k); j++) {
        cout << adj[i][j] << " ";
      }
      cout << endl;
      return 0;
    }
  }
  cout << "No" << endl;
}
