inf = 10 ** 9



n, k, q = list(map(int, input().split()))

a = tuple(map(int, input().split()))



ans = inf

for min_ in sorted(set(a)):

    res = []  # 最小値min_としたとき、取り除ける要素全て

    seq = 0

    for ind, a_ in enumerate(a):

        if a_ >= min_:

            seq += 1

        else:

            if seq >= k:

                sequence_le_k = a[ind - seq:ind]  # 長さk以上の数列

                pick = seq - k + 1  # この個数だけ取り除く

                res.extend(sorted(sequence_le_k)[:pick])

            seq = 0

    else:

        if seq >= k:

            sequence_le_k = a[-seq:]  # 長さk以上の数列

            pick = seq - k + 1  # この個数だけ取り除く

            res.extend(sorted(sequence_le_k)[:pick])

    if len(res) < q:

        continue

    res.sort()

    ans = min(ans, res[q - 1] - min_)  # q回目に取り除いた要素 = 取り除く最大値

print(ans)

def main():

    def calc_x_y(mi):

        """取り除いた要素の最小値がmiとなるように

        操作をQ回行えるか

        行える -> Q回の操作で取り除いた要素の最大値 - mi

        行えない -> -1

        """



        cont = 0

        removed = []

        for i, x in enumerate(a):

            if x < mi:

                if cont >= K:

                    removed += sorted(a[i - cont:i])[:cont - K + 1]

                cont = 0

                continue

            cont += 1

        else:

            if cont >= K:

                removed += sorted(a[-cont:])[:cont - K + 1]



        if len(removed) >= Q:

            removed.sort()

            return removed[Q - 1] - mi

        else:

            return -1



    N, K, Q = list(map(int, input().split()))

    *a, = list(map(int, input().split()))



    mi_cands = sorted(set(a))



    ans = 10 ** 9

    for mi in mi_cands:

        res = calc_x_y(mi)

        if ~res:

            ans = min(ans, res)



    print(ans)





if __name__ == '__main__':

    main()



# import sys

#

# sys.setrecursionlimit(10 ** 7)

#

# input = sys.stdin.readline

# rstrip()

# int(input())

# map(int, input().split())

inf = 10**9
n, k, q = list(map(int, input().split()))
a = tuple(map(int, input().split()))
ans = inf
for min_ in sorted(set(a)):
    res = []  # 最小値min_としたとき、取り除ける要素全て
    seq = 0
    for ind, a_ in enumerate(a):
        if a_ >= min_:
            seq += 1
        else:
            if seq >= k:
                sequence_le_k = a[ind - seq : ind]  # 長さk以上の数列
                pick = seq - k + 1  # この個数だけ取り除く
                res.extend(sorted(sequence_le_k)[:pick])
            seq = 0
    else:
        if seq >= k:
            sequence_le_k = a[-seq:]  # 長さk以上の数列
            pick = seq - k + 1  # この個数だけ取り除く
            res.extend(sorted(sequence_le_k)[:pick])
    if len(res) < q:
        continue
    res.sort()
    ans = min(ans, res[q - 1] - min_)  # q回目に取り除いた要素 = 取り除く最大値
print(ans)

def main():
    def calc_x_y(mi):
        """取り除いた要素の最小値がmiとなるように
        操作をQ回行えるか
        行える -> Q回の操作で取り除いた要素の最大値 - mi
        行えない -> -1
        """
        cont = 0
        removed = []
        for i, x in enumerate(a):
            if x < mi:
                if cont >= K:
                    removed += sorted(a[i - cont : i])[: cont - K + 1]
                cont = 0
                continue
            cont += 1
        else:
            if cont >= K:
                removed += sorted(a[-cont:])[: cont - K + 1]
        if len(removed) >= Q:
            removed.sort()
            return removed[Q - 1] - mi
        else:
            return -1

    N, K, Q = list(map(int, input().split()))
    (*a,) = list(map(int, input().split()))
    mi_cands = sorted(set(a))
    ans = 10**9
    for mi in mi_cands:
        res = calc_x_y(mi)
        if ~res:
            ans = min(ans, res)
    print(ans)


if __name__ == "__main__":
    main()
# import sys
#
# sys.setrecursionlimit(10 ** 7)
#
# input = sys.stdin.readline
# rstrip()
# int(input())
# map(int, input().split())

-inf = 10**9 -n, k, q = list(map(int, input().split())) -a = tuple(map(int, input().split())) -ans = inf -for min_ in sorted(set(a)): -    res = []  # 最小値min_としたとき、取り除ける要素全て -    seq = 0 -    for ind, a_ in enumerate(a): -        if a_ >= min_: -            seq += 1 +def main(): +    def calc_x_y(mi): +        """取り除いた要素の最小値がmiとなるように +        操作をQ回行えるか +        行える -> Q回の操作で取り除いた要素の最大値 - mi +        行えない -> -1 +        """ +        cont = 0 +        removed = [] +        for i, x in enumerate(a): +            if x < mi: +                if cont >= K: +                    removed += sorted(a[i - cont : i])[: cont - K + 1] +                cont = 0 +                continue +            cont += 1 -            if seq >= k: -                sequence_le_k = a[ind - seq : ind]  # 長さk以上の数列 -                pick = seq - k + 1  # この個数だけ取り除く -                res.extend(sorted(sequence_le_k)[:pick]) -            seq = 0 -    else: -        if seq >= k: -            sequence_le_k = a[-seq:]  # 長さk以上の数列 -            pick = seq - k + 1  # この個数だけ取り除く -            res.extend(sorted(sequence_le_k)[:pick]) -    if len(res) < q: -        continue -    res.sort() -    ans = min(ans, res[q - 1] - min_)  # q回目に取り除いた要素 = 取り除く最大値 -print(ans) +            if cont >= K: +                removed += sorted(a[-cont:])[: cont - K + 1] +        if len(removed) >= Q: +            removed.sort() +            return removed[Q - 1] - mi +        else: +            return -1 + +    N, K, Q = list(map(int, input().split())) +    (*a,) = list(map(int, input().split())) +    mi_cands = sorted(set(a)) +    ans = 10**9 +    for mi in mi_cands: +        res = calc_x_y(mi) +        if ~res: +            ans = min(ans, res) +    print(ans) + + +if __name__ == "__main__": +    main() +# import sys +# +# sys.setrecursionlimit(10 ** 7) +# +# input = sys.stdin.readline +# rstrip() +# int(input()) +# map(int, input().split())