#include using namespace std; using ll = long long; using ull = unsigned long long; using vi = vector; using vvi = vector>; using vll = vector; using pi = pair; using vpi = vector; struct frac { ll nom; ll denom; bool operator<(const frac& o) const { return nom * o.denom < o.nom * denom; } void _tonorm() { ll g = __gcd(nom, denom); nom /= g; denom /= g; if (denom < 0) { denom *= -1; nom *= -1; } } frac operator*(const frac& o) const { return frac(nom * o.nom, denom * o.denom).tonorm(); } frac operator/(const frac& o) const { return frac(nom * o.denom, denom * o.nom).tonorm(); } frac operator-(const frac& o) const { return frac(nom * o.denom - o.nom * denom, denom * o.denom).tonorm(); } frac tonorm() const { frac res = *this; res._tonorm(); return res; } }; ostream& operator<<(ostream& ostr, const frac& f) { ostr << f.nom << '/' << f.denom; return ostr; } using pff = pair; void solve() { int n, p; cin >> n >> p; vpi pts(n); for (auto& x : pts) cin >> x.first >> x.second; map, int> mp; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (i == j) continue; frac cx = {pts[i].first + pts[j].first, 2}; frac cy = {pts[i].second + pts[j].second, 2}; frac d = {-pts[i].first + pts[j].first, pts[i].second - pts[j].second}; cx._tonorm(); cy._tonorm(); d._tonorm(); if (d.denom == 0) { cy = {0, 1}; } else { auto dy = cx * d; cy = cy - dy; cx = {0, 1}; } cx._tonorm(); cy._tonorm(); d._tonorm(); mp[{pff{cx, cy}, d}]++; } } int best = 0; for (const auto&[k, v] : mp) { best = max(best, v); } if (best * 100 >= n * p) cout << "YES\n"; else cout << "NO\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int t = 1; //cin >> t; while (t--) { solve(); } return 0; }