import java.io.PrintWriter
import java.util.StringTokenizer

fun main() {

    fun PrintWriter.solve() {
        var (n,m,k) = List(3){nextInt()}

        var link = IntArray(n){it}
        var size = IntArray(n){1}

        fun find(x : Int) : Int{
            if (x != link[x])
                link[x] = find(link[x])

            return link[x]
        }

        fun unite(a : Int, b:Int):Unit{
            var a  = find(a)
            var b = find(b)

            if (a != b){
                if (size[b] > size[a])a = b.also { b = a }
                size[a] += size[b]
                link[b] = a
            }
        }

        var graph = Array<Edge>(n){Edge(mutableListOf(), mutableListOf())}
        repeat(m){
            var (a,b) = List(2){nextInt()}
            a--
            b--

            graph[a].friends.add(b)
            graph[b].friends.add(a)

            unite(a,b)
        }

        repeat(k){
            var (c,d) = List(2){nextInt()}
            c--
            d--

            graph[c].blocks.add(d)
            graph[d].blocks.add(c)


        }

        for (i in 0..n-1){
            var ans = size[find(i)]
            for (j in graph[i].friends){
                if (find(i) == find(j)) ans--
            }

            for (j in graph[i].blocks){
                if (find(j) == find(i))ans--
            }

            print("${ans - 1} ")
        }




    }

    writer.solve()
    writer.flush()


}

data class Edge(val friends : MutableList<Int> , val blocks : MutableList<Int>)




private val reader = System.`in`.bufferedReader()
private val writer = PrintWriter(System.out, false)

private var tokenizer: StringTokenizer = StringTokenizer("")

private fun next(): String {
    while (tokenizer.hasMoreTokens().not()) tokenizer = StringTokenizer(reader.readLine())
    return tokenizer.nextToken()
}

private fun nextInt() = next().toInt()

private fun nextLong() = next().toLong()
private fun nextDouble() = next().toDouble()
private fun nextLine() = reader.readLine()

