#!/usr/bin/env python3
import sys

# Helpers

available = dict()
last_occ = dict()
num_occ = dict()
next_avail = 0

def add_available(c):
  global available
  if num_occ[c] not in available:
    available[num_occ[c]] = []
  available[num_occ[c]] += [c]

def take_available():
  global available
  global next_avail
  while len(available) != 0 and (next_avail not in available or len(available[next_avail]) == 0):
    if next_avail in available:
      del available[next_avail]
    next_avail += 1
  if len(available) == 0:
    return -1
  c = available[next_avail].pop()
  return c

# Solution

(num_stripes, num_colours, spacing) = map(int, input().split())

m = int(input())
v = list(map(int, input().split()))

for i in range(1, num_colours+1):
  num_occ[i] = 0

for i in range(m):
  if v[i] in last_occ and i - last_occ[v[i]] < spacing:
    print('IMPOSSIBLE ')
    sys.exit(0)
  last_occ[v[i]] = i
  num_occ[v[i]] = (num_occ[v[i]] if v[i] in num_occ else 0) + 1

for i in range(1, num_colours+1):
  if i not in last_occ or last_occ[i] + spacing < m:
    add_available(i)

for i in range(m, num_stripes):
  if i - spacing >= 0:
    if v[i - spacing] in last_occ and last_occ[v[i - spacing]] == i - spacing:
      add_available(v[i - spacing])

  c = take_available()
  if c == -1:
    print('impossible')
    sys.exit(0)

  v += [c]
  num_occ[c] = (num_occ[c] if c in num_occ else 0) + 1
  last_occ[c] = i

print(' '.join(map(str, v)))
