#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef LOCAL #include "debug.h" #else #define debug(x...) #endif #define int ll //#pragma GCC optimize("Ofast") using namespace std; typedef long long ll; typedef long double ld; typedef pair pii; typedef pair pll; #define sz(x) int((x).size()) #ifndef LOCAL mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #else mt19937 rng(228); #endif const int N = 1e2 + 7; const int inf = INT_MAX / 2; const ll INF = LLONG_MAX / 3; const int MOD = 998244353; const ld eps = 1e-6; const string cars[] = {"🚗", "🚕", "🚙"}; int dp[100 + 7][100 * 50 + 7]; int l[5000 + 7], c[5000 + 7], n, k; signed main() { #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif cout << fixed << setprecision(9); ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); cin >> n >> k; int len = 0; for (int i = 1; i <= n; i++) { cin >> l[i] >> c[i]; len += l[i]; dp[c[i]][0] = 1; for (int j = 100 * 50 + 6 - l[i]; j >= 0; j--) { if (dp[c[i]][j] && !dp[c[i]][j + l[i]]) { dp[c[i]][j + l[i]] = i; } } } assert(len % k == 0); len /= k; int s = -1; for (int i = len - 1; i > 0; i--) { bool flag = true; for (int j = 1; j <= k; j++) { if (!dp[j][i]) { flag = false; break; } } if (flag) { s = len - i; break; } } if (s == -1) { return cout << "NO\n", 0; } cout << "YES\n"; for (int i = 1; i <= k; i++) { int j = s; while (j > 0) { cout << dp[i][j] << " "; j -= l[dp[i][j]]; } } cout << endl; return 0; }