### BUGGY CODE ###

import time

N, M, K = [int(i) for i in input().split(" ")]

friend_list = []
block_list = []

for i in range(M):
    s = input()
    a, b = s.split(" ")
    a = int(a)
    b = int(b)

    friend_list.append((min(a, b), max(a,b)))

for i in range(K):
    s = input()
    a, b = s.split(" ")
    a = int(a)
    b = int(b)

    block_list.append((min(a, b), max(a,b)))

mode_list = []
for i in range(1,N+1):
    current = []
    for j in range(1,N+1):
        if i == j:
            current.append(-2)
        elif (i, j) in friend_list or (j, i) in friend_list:
            current.append(2)
        elif (i,j) in block_list or (j, i) in block_list:
            current.append(-1)
        else:
            current.append(0)
    mode_list.append(current)

searched = [False for i in range(N)]

for i in range(N):
    if searched[i]:
        continue

    kouho = []
    chain_before = [i+1]

    #print(f"search {i+1}")

    while chain_before:
        target = chain_before.pop(-1)
        #print(f"target {target}")
        for j, mode in enumerate(mode_list[target-1], 1):
            if mode == 2:
                if not searched[j-1]:
                    #print(f"append {j}")
                    kouho.append(j)
                    chain_before.append(j)
                    searched[j-1] = True

    kouho = set(kouho)
    #print(kouho)
    for i in kouho:
        for j in kouho:
            if mode_list[i-1][j-1] == 0:
                mode_list[i-1][j-1] = 1


result = []
for modes in mode_list:
    result.append(modes.count(1))

#print(mode_list)
#print(searched)
#print(result)

print(" ".join([str(i) for i in result]))

### FIXED CODE ###

from collections import defaultdict
import sys
import time

sys.setrecursionlimit(2000)
N, M, K = [int(i) for i in input().split(" ")]

t = time.time()
class UnionNode():
    def __init__(self, number):
        self.number = number
        self.volume = 1
        self.master = None

    @property
    def root(self):
        if self.master:
            self.master = self.master.root
            return self.master
        else:
            return self

    def unite(self, target):
        seroot = self.root
        taroot = target.root
        if seroot.number == taroot.number:
            pass
        else:
            #print(f"unite {target.rootnum}({target.root.volume}), {self.rootnum}({self.root.volume})")
            if seroot.number < taroot.number:
                seroot.volume += taroot.volume
                taroot.master = seroot
            else:
                taroot.volume += seroot.volume
                seroot.master = taroot

nodes = [UnionNode(i) for i in range(N)]

outlist = defaultdict(lambda :[])

for i in range(M):
    s = input()
    a, b = s.split(" ")
    a = int(a) - 1
    b = int(b) - 1
    nodes[a].unite(nodes[b])
    outlist[a].append(b)
    outlist[b].append(a)

for i in range(K):
    s = input()
    a, b = s.split(" ")
    a = int(a) - 1
    b = int(b) - 1
    outlist[a].append(b)
    outlist[b].append(a)

result = []
for i in range(N):
    rootnode = nodes[i].root
    ret = rootnode.volume - 1
    for out in outlist[i]:
        if nodes[out].root.number == rootnode.number:
            ret -=1
    result.append(ret)

#for i in range(100):
#    print(result[i])

print(" ".join([str(i) for i in result]))

#print(time.time() - t)