def dfs(graph, start):
visited, stack = set(), [start]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
stack.extend(graph[vertex] - visited)
return visited
if __name__ == '__main__':
n, m, k = [int(i) for i in input().split(' ')]
sb_map = {}
ver = {}
for i in range(k):
index, lan = [int(i) for i in input().split(' ')]
if index not in sb_map:
sb_map[index] = set([lan])
else:
sb_map[index].add(lan)
for i in range(1, n+1):
if i in sb_map:
for j in range(1, n+1):
if j in sb_map:
if sb_map[i].intersection(sb_map[j]):
if i in ver:
ver[i].add(j)
else:
ver[i] = set([j])
visited = []
count = 0
for i in range(1, n+1):
if i not in ver:
count += 1
continue
if i not in visited:
visited.extend(dfs(ver, i))
count += 1
print(count-1)
import sys
n = int(sys.stdin.readline().strip())
s = sys.stdin.readline().strip()
num = [int(i) for i in sys.stdin.readline().strip().split()]
for i in s[::-1]:
num[ord(i) - ord('A')] = -1
print(chr(num.index(max(num)) + ord('A')))