'''读取数据'''
k, m, n, s = map(int, input().split())
x = list(map(float, input().split()))
# print(x)
samples = []
while True:
try:
line = input()
sample = []
if line: # 如果不是空行
sample.extend(map(float,line.split()))
samples.append(sample)
except EOFError:
break
# print(samples)
'''计算k近邻距离'''
dis = list() # 距离
c = list() # 每类样本数
for i in range(m): # 遍历样本
d = 0
for j in range(n): # 计算距离
d += (x[j]-samples[i][j])**2
dis.append([d,samples[i][-1]])
dis.sort(key=lambda x:x[0])
dis_last = dis[0:k] # k近邻距离
'''类别转为整形'''
for sub_dis in dis_last:
sub_dis[1] =int(sub_dis[1])
# print(dis_last)
'''计算每类样本数最值'''
for i in range(s): # 类别匹配样本数
c.append(0)
for sub_dis in dis_last:
if sub_dis[1] == i:
c[i] += 1
# print(c)
max_v = max(c) # 最多类别样本数
max_indices = [i for i, value in enumerate(c) if value == max_v] # 最多类别
# print(max_indices)
'''样本数最值加最短距离联合判断'''
stop = False
for sub_dis in dis_last:
if stop == True:
break
for max_indece in max_indices:
if sub_dis[1] == max_indece:
print(f'{max_indece} {max_v}')
stop = True
break