fun main(args: Array<String>) {
    val (n, m, k) = readLine()!!.split(" ").map { it.toInt() }
    val arr = IntArray(n) { 0 }
    repeat(m) {
        val (a, b) = readLine()!!.split(" ").map { it.toInt() - 1 }
        UnionFind.unite(a, b)
        arr[a]--
        arr[b]--
    }

    for(i in arr.indices) {
        arr[i] += UnionFind.size(i) - 1
    }

    repeat(k) {
        val (c, d) = readLine()!!.split(" ").map { it.toInt() - 1 }
        if (UnionFind.same(c, d)) {
            arr[c]--
            arr[d]--
        }
    }

    println(arr.joinToString(" "))
}

class UnionFind {
    companion object {
        val par = IntArray(100000) { -1 }
        fun root(x: Int): Int {
            if (par[x] < 0) return x
            else {
                par[x] = root(par[x])
                return par[x]
            }
        }

        fun same(x: Int, y: Int): Boolean {
            return root(x) == root(y)
        }

        fun unite(x: Int, y: Int) {
            var x = x
            var y = y
            x = root(x)
            y = root(y)
            if (x == y) return
            if (par[x] > par[y]) {
                val tmp = x
                x = y
                y = tmp
            }
            par[x] += par[y]
            par[y] = x
        }

        fun size(x: Int) : Int = -par[root(x)]
    }
}