

class UnionFind(object):

    "https://www.kumilog.net/entry/union-find"

    def __init__(self, n=1):

        self.par = [i for i in range(n)]

        self.rank = [0 for _ in range(n)]

        self.size = [1 for _ in range(n)]



    def find(self, x):

        """

        x が属するグループを探索

        """

        if self.par[x] == x:

            return x

        else:

            self.par[x] = self.find(self.par[x])

            return self.par[x]



    def union(self, x, y):

        """

        x と y のグループを結合

        """

        x = self.find(x)

        y = self.find(y)

        if x != y:

            if self.rank[x] < self.rank[y]:

                x, y = y, x

            if self.rank[x] == self.rank[y]:

                self.rank[x] += 1

            self.par[y] = x

            self.size[x] += self.size[y]



    def is_same(self, x, y):

        """

        x と y が同じグループか否か

        """

        return self.find(x) == self.find(y)



    def get_size(self, x):

        """

        x が属するグループの要素数

        """

        x = self.find(x)

        return self.size[x]



N, M, K = list(map(int, input().split(" ")))





uf = UnionFind(N)

fr = {}

for _ in range(M):

    a, b = list(map(int, input().split(" ")))

    a -= 1

    b -= 1

    uf.union(a, b)

    if fr.get(a) is not None:

        fr[a] += 1

    else:

        fr[a] = 1



    if fr.get(b) is not None:

        fr[b] += 1

    else:

        fr[b] = 1



bl = {}

for _ in range(K):

    c, d = list(map(int, input().split(" ")))

    c -= 1

    d -= 1

    if not uf.is_same(c, d):

        continue



    if bl.get(c) is not None:

        bl[c] += 1

    else:

        bl[c] = 1



    if bl.get(d) is not None:

        bl[d] += 1

    else:

        bl[d] = 1





for i in range(N):

    s = uf.get_size(i) - 1

    s -= bl.get(i, 0)

    s -= fr.get(i, 0)

    print(s)
class UnionFind:

    "https://www.kumilog.net/entry/union-find"

    def __init__(self, n=1):

        self.par = [i for i in range(n)]

        self.rank = [0 for _ in range(n)]

        self.size = [1 for _ in range(n)]



    def find(self, x):

        """

        x が属するグループを探索

        """

        if self.par[x] == x:

            return x

        else:

            self.par[x] = self.find(self.par[x])

            return self.par[x]



    def union(self, x, y):

        """

        x と y のグループを結合

        """

        x = self.find(x)

        y = self.find(y)

        if x != y:

            if self.rank[x] < self.rank[y]:

                x, y = y, x

            if self.rank[x] == self.rank[y]:

                self.rank[x] += 1

            self.par[y] = x

            self.size[x] += self.size[y]



    def is_same(self, x, y):

        """

        x と y が同じグループか否か

        """

        return self.find(x) == self.find(y)



    def get_size(self, x):

        """

        x が属するグループの要素数

        """

        x = self.find(x)

        return self.size[x]



N, M, K = list(map(int, input().split(" ")))





uf = UnionFind(N)

fr = {}

for _ in range(M):

    a, b = list(map(int, input().split(" ")))

    a -= 1

    b -= 1

    

    uf.union(a, b)



    fr[a] = fr.get(a, 0) + 1

    fr[b] = fr.get(b, 0) + 1



bl = {}

for _ in range(K):

    c, d = list(map(int, input().split(" ")))

    c -= 1

    d -= 1

    if not uf.is_same(c, d):

        continue



    fr[c] = fr.get(c, 0) + 1

    fr[d] = fr.get(d, 0) + 1





for i in range(N):

    s = uf.get_size(i) - 1

    s -= bl.get(i, 0)

    s -= fr.get(i, 0)

    print(s)
class UnionFind(object):
    "https://www.kumilog.net/entry/union-find"

    def __init__(self, n=1):
        self.par = [i for i in range(n)]
        self.rank = [0 for _ in range(n)]
        self.size = [1 for _ in range(n)]

    def find(self, x):
        """
        x が属するグループを探索
        """
        if self.par[x] == x:
            return x
        else:
            self.par[x] = self.find(self.par[x])
            return self.par[x]

    def union(self, x, y):
        """
        x と y のグループを結合
        """
        x = self.find(x)
        y = self.find(y)
        if x != y:
            if self.rank[x] < self.rank[y]:
                x, y = y, x
            if self.rank[x] == self.rank[y]:
                self.rank[x] += 1
            self.par[y] = x
            self.size[x] += self.size[y]

    def is_same(self, x, y):
        """
        x と y が同じグループか否か
        """
        return self.find(x) == self.find(y)

    def get_size(self, x):
        """
        x が属するグループの要素数
        """
        x = self.find(x)
        return self.size[x]


N, M, K = list(map(int, input().split(" ")))
uf = UnionFind(N)
fr = {}
for _ in range(M):
    a, b = list(map(int, input().split(" ")))
    a -= 1
    b -= 1
    uf.union(a, b)
    if fr.get(a) is not None:
        fr[a] += 1
    else:
        fr[a] = 1
    if fr.get(b) is not None:
        fr[b] += 1
    else:
        fr[b] = 1
bl = {}
for _ in range(K):
    c, d = list(map(int, input().split(" ")))
    c -= 1
    d -= 1
    if not uf.is_same(c, d):
        continue
    if bl.get(c) is not None:
        bl[c] += 1
    else:
        bl[c] = 1
    if bl.get(d) is not None:
        bl[d] += 1
    else:
        bl[d] = 1
for i in range(N):
    s = uf.get_size(i) - 1
    s -= bl.get(i, 0)
    s -= fr.get(i, 0)
    print(s)

class UnionFind:
    "https://www.kumilog.net/entry/union-find"

    def __init__(self, n=1):
        self.par = [i for i in range(n)]
        self.rank = [0 for _ in range(n)]
        self.size = [1 for _ in range(n)]

    def find(self, x):
        """
        x が属するグループを探索
        """
        if self.par[x] == x:
            return x
        else:
            self.par[x] = self.find(self.par[x])
            return self.par[x]

    def union(self, x, y):
        """
        x と y のグループを結合
        """
        x = self.find(x)
        y = self.find(y)
        if x != y:
            if self.rank[x] < self.rank[y]:
                x, y = y, x
            if self.rank[x] == self.rank[y]:
                self.rank[x] += 1
            self.par[y] = x
            self.size[x] += self.size[y]

    def is_same(self, x, y):
        """
        x と y が同じグループか否か
        """
        return self.find(x) == self.find(y)

    def get_size(self, x):
        """
        x が属するグループの要素数
        """
        x = self.find(x)
        return self.size[x]


N, M, K = list(map(int, input().split(" ")))
uf = UnionFind(N)
fr = {}
for _ in range(M):
    a, b = list(map(int, input().split(" ")))
    a -= 1
    b -= 1
    uf.union(a, b)
    fr[a] = fr.get(a, 0) + 1
    fr[b] = fr.get(b, 0) + 1
bl = {}
for _ in range(K):
    c, d = list(map(int, input().split(" ")))
    c -= 1
    d -= 1
    if not uf.is_same(c, d):
        continue
    fr[c] = fr.get(c, 0) + 1
    fr[d] = fr.get(d, 0) + 1
for i in range(N):
    s = uf.get_size(i) - 1
    s -= bl.get(i, 0)
    s -= fr.get(i, 0)
    print(s)

-class UnionFind(object): +class UnionFind: -    if fr.get(a) is not None: -        fr[a] += 1 -    else: -        fr[a] = 1 -    if fr.get(b) is not None: -        fr[b] += 1 -    else: -        fr[b] = 1 +    fr[a] = fr.get(a, 0) + 1 +    fr[b] = fr.get(b, 0) + 1 -    if bl.get(c) is not None: -        bl[c] += 1 -    else: -        bl[c] = 1 -    if bl.get(d) is not None: -        bl[d] += 1 -    else: -        bl[d] = 1 +    fr[c] = fr.get(c, 0) + 1 +    fr[d] = fr.get(d, 0) + 1