#!/usr/bin/python3 -OO from bisect import bisect_right # Pro binární vyhledávání ##### # Načtení vstupu ##### (N,K) = map(int,input().split()) # Počet osob, násobek atrakcí osoby = [] for i in range(N): (rychlost_min,rychlost_max) = input().split() # Načtení osoby osoby.append((i,int(rychlost_min),int(rychlost_max))) # U každé osoby si pamatujeme její pořadí a snesitelné rychlosti atrakce = input().split() # Načtení atrakcí atrakce = [(int(atrakce[i]), i) for i in range(len(atrakce))] # U každé atrakce si rovněž pamatujeme její původní pořadí ##### # Samotný algoritmus ##### osoby.sort(key=lambda x: x[2]) atrakce.sort(key=lambda x: x[0]) # Osoby setřídíme podle nejvyšší snesitelné rychlosti # Atrakce rovněž setřídíme, podle hodnot vysledky = [-1 for i in range(N*K)] # N osob, N výsledků for o in osoby: start = bisect_right(atrakce,(o[1],-1)) # Hledáme index první snesitelné atrakce, porovnávání tuplí :) vybrane = atrakce[start:start+K] for v in vybrane: vysledky[v[1]] = o[0] # Vybereme od tohoto indexu K atrakcí, které přidělíme osobě, kde # pro každou atrakci uložíme index osoby do pole výsledků podle # původního indexu atrakce del atrakce[start:start+K] # Odstraníme použité atrakce ze seznamu ##### # Výstup ##### print(' '.join([str(i) for i in vysledky])) # Vypíšeme seznam indexů