int n, m; int a[kMaxN], cnt[kMaxN], sz[kMaxN], d[kMaxN]; std::vector<int> vec[kMaxN];
voiddickdreamer(){ std::cin >> n >> m; std::fill_n(cnt + 1, n, 0); for (int i = 1; i <= m; ++i) vec[i].clear(); std::priority_queue<std::pair<int, int>> q; for (int i = 1; i <= n; ++i) std::cin >> a[i], ++cnt[a[i]]; for (int i = 1; i <= m; ++i) std::cin >> sz[i]; for (int i = 1; i <= m; ++i) { std::cin >> d[i]; for (int j = 1; j <= sz[i] / d[i]; ++j) q.emplace(d[i], i); if (sz[i] % d[i]) q.emplace(sz[i] % d[i], i); } for (int i = 1; i <= n; ++i) { std::vector<std::pair<int, int>> vv; for (int j = 1; j <= cnt[i]; ++j) { if (!q.size()) returnvoid(std::cout << "-1\n"); auto [l, id] = q.top(); q.pop(); --l, vec[id].emplace_back(i); if (l) vv.emplace_back(l, id); } for (auto p : vv) q.emplace(p); } for (int i = 1; i <= m; ++i) { staticint cnt[kMaxN] = {0}; std::vector<int> col; for (auto x : vec[i]) { if (!cnt[x]++) col.emplace_back(x); } std::sort(col.begin(), col.end(), [&] (int i, int j) { return cnt[i] > cnt[j]; }); std::vector<std::vector<int>> res(cnt[col[0]]); int now = 0; for (auto x : col) { int lim = (cnt[x] == res.size() ? res.size() : res.size() - 1); for (int c = 1; c <= cnt[x]; ++c, now = (now + 1) % lim) { assert(now < res.size()); res[now].emplace_back(x); } } for (auto &vec : res) { for (auto x : vec) std::cout << x << ' '; } std::cout << '\n'; for (auto x : vec[i]) --cnt[x]; } }