Герой Аркадий находится на узкой полоске земли, разделенной на *n* зон, пронумерованных от 1 до *n*. Из *i*-й зоны можно пройти лишь в (*i* - 1)-ю зону и в (*i* + 1)-ю зону, если они существуют. При этом между каждой парой соседних зон находятся пограничные врата, которые могут быть разных цветов, цвет врат между *i*-й и (*i* + 1)-й зоной равен *g*<sub class="lower-index">*i*</sub>.

Аркадий может пройти пограничные врата некоторого цвета, только если он перед этим побывал в одном из шатров хранителей ключей этого цвета и взял ключ. В каждой зоне находится ровно один шатер хранителя ключей некоторого цвета, цвет шатра в *i*-й зоне равен *k*<sub class="lower-index">*i*</sub>. После посещения шатра определенного цвета Аркадий может неограниченное число раз проходить через любые врата этого цвета.

На проход через одни врата Аркадий тратит один ход, на посещение шатра и другие перемещения ходы не требуются. За какое минимальное число ходов Аркадий может попасть из зоны *a* в зону *b*, если изначально у него нет никаких ключей?
Первая строка содержит три целых числа *n*, *a*, *b* (2 ≤ *n* ≤ 100 000, 1 ≤ *a*, *b* ≤ *n*, *a* ≠ *b*) — число зон, номер начальной зоны и номер конечной зоны, соответственно.

Вторая строка содержит *n* - 1 целое число *g*<sub class="lower-index">1</sub>, *g*<sub class="lower-index">2</sub>, ..., *g*<sub class="lower-index">*n* - 1</sub> (1 ≤ *g*<sub class="lower-index">*i*</sub> ≤ 100 000), где *g*<sub class="lower-index">*i*</sub> означает цвет пограничных врат между зонами *i* и *i* + 1.

Третья строка содержит *n* целых чисел *k*<sub class="lower-index">1</sub>, *k*<sub class="lower-index">2</sub>, ..., *k*<sub class="lower-index">*n*</sub> (1 ≤ *k*<sub class="lower-index">*i*</sub> ≤ 100 000), где *k*<sub class="lower-index">*i*</sub> означает цвет шатра хранителя ключей в *i*-й зоне.
В первом примере, чтобы попасть из зоны 4 в зону 1, Аркадию нужно сначала взять ключ цвета 1, пройти в зону 3, там взять ключ цвета 2 и пройти обратно в зону 4 и затем в зону 5, взять там ключ цвета 3 и дойти до зоны 1 за четыре хода.

Во втором примере Аркадий может дойти лишь до четвертой зоны, так как шатров хранителей ключей цвета 1 нет совсем.
n, start, fin = map(int, input().split())
# path = list(map(int, input().split()))
start -= 1
fin -= 1
pos = start
lf = False
need_gates = []
have_keys = []
key_gates = dict()
total = 0


def check(ch):
    if key_gates[ch][1] not in have_keys:
        return False
    else:
        return True


if fin < start:
    lf = True

gates = input().split()

# need_gates = list(set(need_gates))
# print(need_gates)
keys = input().split()
for i in range(n):
    key_gates[i] = [0, 0]
    if i != n - 1:
        key_gates[i][1] = gates[i]
    key_gates[i][0] = keys[i]

if lf:
    need_gates = gates[fin:start]
    aval = keys[fin + 1:start + 1]
    not_aval = keys[start + 1:]
else:
    need_gates = gates[start:fin]
    aval = keys[start:fin]
    not_aval = keys[:start]

# need_gates = list(set(need_gates))
# aval = list(set(aval))
# not_aval = list(set(not_aval))
curr = [key_gates[pos][0], ]
p = pos
while True:
    if lf:
        if key_gates[p - 1][1] in curr:
            curr.append(key_gates[p - 1][0])
            p -= 1
        else:
            break
    else:
        if key_gates[p][1] in curr:
            curr.append(key_gates[p+1][0])
            p+=1
        else:
            break
# print(curr)

for x in not_aval:
    if x not in need_gates or x in curr:
        not_aval.remove(x)


have_keys.append(key_gates[pos][0])

cant = False
while pos != fin:
    while not_aval:
        if cant:
            break
        # if cant:
        #     break
        if lf:
            if check(pos):
                pos += 1
                total += 1
                if key_gates[pos][0] in not_aval:
                    not_aval.remove(key_gates[pos][0])

                have_keys.append(key_gates[pos][0])
            else:
                need = key_gates[pos][1]
                while True:
                    if check(pos - 1):
                        pos -= 1
                        total = +1
                        if key_gates[pos][0] == need:
                            have_keys.append(key_gates[pos][0])
                            break
                    else:
                        cant = True
                        # print('faliure')
                        break
        else:
            if check(pos - 1):
                pos -= 1
                total += 1
                if key_gates[pos][0] in not_aval:
                    not_aval.remove(key_gates[pos][0])

                have_keys.append(key_gates[pos][0])
            else:
                need = key_gates[pos - 1][1]
                while True:
                    if check(pos):
                        pos += 1
                        total = +1
                        if key_gates[pos][0] == need:
                            have_keys.append(key_gates[pos][0])
                            break
                    else:
                        cant = True
                        # print('faliure')
                        break

    if cant:
        break

    if lf:
        if check(pos - 1):
            have_keys.append(key_gates[pos - 1][0])
            pos -= 1
            total += 1

        else:
            cant = True
            break
    else:
        if check(pos):
            have_keys.append(key_gates[pos + 1][0])
            pos += 1
            total += 1

        else:
            cant = True
            break

if cant:
    print(-1)
else:
    print(total)

# print(key_gates)
# print(need_gates)
# print(aval)
# print(not_aval)
