R=range import time import random import math def TwoDimensionalAllNearestNeighbourRandomised(d2,S,T,bucket_size,time_bound): S_size = len(S); T_size = len(T) if S_size == 0:return[] assert( T_size > 0 ) nn = [set()for i in R(S_size)] for i in R(S_size):nn[i].add(0) line = [0]*T_size now = time.time() time_bound /= 1000 while time.time() - now < time_bound: theta = random.randint( -1000 , 1000 ) * 0.00314 dx = math.cos( theta ); dy = math.sin( theta ) def proj( v ):return v[0] * dx + v[1] * dy for j in R(T_size):line[j] = [ proj( T[j] ) , j ] line.sort() line_ord = [0]*T_size for i in R(S_size): proj_i = [ proj( S[i] ) , 0 ] l , r = 0 , T_size while l + 1 < r: m = ( l + r ) >> 1 if proj_i < line[m]:r = m else:l = m j_min = max( 0 , l - bucket_size ) j_ulim = min( T_size , l + bucket_size + 1 ) d_opt = d2( S[i] , T[next( iter( nn[i] ) )] ) for j in R(j_min,j_ulim): d_temp = d2( S[i] , T[line[j][1]] ) if d_opt > d_temp: d_opt = d_temp nn[i] = set(); nn[i].add( line[j][1] ) elif d_opt == d_temp and not line[j][1] in nn[i]: nn[i].add( line[j][1] ) return[list(nn[i])for i in R(S_size)] def d2(u,v):return (u[0]-v[0])**2+(u[1]-v[1])**2 J=lambda:list(map(int,input().split())) N,M,K=J() N+=1 XY=[J()for i in R(N)] AB=[J()for k in R(K)] d=min(d2(XY[0],XY[i])for i in R(1,N))**0.5 ann1=TwoDimensionalAllNearestNeighbourRandomised(d2,AB,XY,1000,2000) ann2=TwoDimensionalAllNearestNeighbourRandomised(d2,AB,XY,17,2000) answer=sum(min(d2(XY[0],AB[k])**0.5,min(d+d2(XY[i],AB[k])**0.5 for i in ann1[k]+ann2[k]))for k in R(K)) print(answer*2)