def main1(n,d,w,uv,st): gd=[[] for _ in range(n)] gw=[[] for _ in range(n)] for u,v in uv: u,v=u-1,v-1 gd[u].append(v) gd[v].append(u) for s,t in st: s,t=s-1,t-1 gw[s].append(t) gw[t].append(s) ret=0 # 自動車用道路連結成分 groupd=set() mi=set(range(n)) while mi: v=mi.pop() seen={v} todo={v} ntodo=set() while todo: v=todo.pop() for nv in gd[v]: if nv in mi: todo.add(nv) seen.add(nv) mi.discard(nv) for nv in gw[v]: ntodo.add(nv) num1=len(seen) # 自動車用道路で行ける都市の数 if num1==1:continue groupd|=seen seen|=ntodo while ntodo: v=ntodo.pop() for nv in gw[v]: if nv not in seen: ntodo.add(nv) seen.add(nv) num2=len(seen) # はじめの都市から到達可能なすべての都市 ret+=num1*(num2-1) # 歩行者用道路連結成分 mi=set(range(n)) while mi: v=mi.pop() todo={v} num1,num2=0,0 if v in groupd: num1+=1 else: num2+=1 while todo: v=todo.pop() for nv in gw[v]: if nv in mi: mi.discard(nv) todo.add(nv) if nv in groupd: num1+=1 else: num2+=1 ret+=num2*(num2+num1-1) return ret import sys input=sys.stdin.readline if __name__=='__main__': n,d,w=map(int,input().split()) uv=[list(map(int,input().split())) for _ in range(d)] st=[list(map(int,input().split())) for _ in range(w)] ret1=main1(n,d,w,uv,st) print(ret1)