#include using namespace std; using ll = long long; int main(){ ios::sync_with_stdio(false); cin.tie(0); int n, m, k; cin >> n >> m >> k; vector> ans; array,100> B{}; vector path; for(int i = 0; i < k; i++) path.emplace_back(i); path.emplace_back(n - 1); for(int i = 0; i <= k; i++){ for(int j = i + 1; j <= k; j++){ B[path[i]][path[j]] = B[path[j]][path[i]] = true; if(j - i >= 2)ans.emplace_back(path[i], path[j]); } } for(int i = k; i + 1 < n; i++){ for(int j = 3; j <= k; j++){ B[path[j]][i] = B[i][path[j]] = true; ans.emplace_back(path[j], i); } } if(m < ans.size()){ cout << "No" << endl; return 0; } for(int i = 0; i < n; i++){ for(int j = i + 1; j < n; j++){ if(!B[i][j]) ans.emplace_back(i, j); } } if(ans.size() < m){ cout << "No" << endl; }else{ cout << "Yes\n"; array,100> C{}; for(int i = 0; i < n; i++) C[i].fill(1), C[i][i] = 0; for(int i = 0; i < m; i++){ auto [u, v] = ans[i]; C[u][v] = C[v][u] = 1 << 29; cout << u + 1 << ' ' << v + 1 << '\n'; } /*for(int k = 0; k < n; k++){ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ C[i][j] = min(C[i][j], C[i][k] + C[k][j]); } } } for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ cerr << C[i][j] << ' '; } cerr << '\n'; }*/ } }