"use strict";
    
class Graph {
 constructor() {
   this.adjacencyList = {};
 }

//ノード追加
 addVertex(vertex) {
   this.adjacencyList[vertex] = [];
 }

 //無向グラフ
 addEdge(v1, v2) {
   this.adjacencyList[v1].push(v2);
   this.adjacencyList[v2].push(v1);
 }

 //有向グラフ
 addEdgeDirected(v1, v2) {
   this.adjacencyList[v1].push(v2);
 }

 //エッジを削除
 removeEdge(vertex1, vertex2) {
   this.adjacencyList[vertex1] = this.adjacencyList[vertex1].filter(
     v => v !== vertex2
   );
   this.adjacencyList[vertex2] = this.adjacencyList[vertex2].filter(
     v => v !== vertex1
   );
 }

//ノードを削除
 removeVertex(vertex) {
   while (this.adjacencyList[vertex].length) {
     const adjacentVertex = this.adjacencyList[vertex].pop();
     this.removeEdge(vertex, adjacentVertex);
   }
   delete this.adjacencyList[vertex];
 }

//深さ優先探索
depthFirstIterative(start) {
   //ノードを格納するスタック
   const stack = [start];
   //訪れた順番を格納
   const result = [];
   //訪れたフラグ
   const visited = {};
   //現在のノード
   let currentVertex;
   //訪問済みフラグを立てる
   visited[start] = true;

   while (stack.length) {
     currentVertex = stack.pop();
     result.push(currentVertex);

     this.adjacencyList[currentVertex].forEach(neighbor => {
       if (!visited[neighbor]) {
         visited[neighbor] = true;
         stack.push(neighbor);
       }
     });
   }
   return result;
 }

//幅優先探索
breadthFirst(start) {

   const queue = [start];
   const result = [];
   const visited = {};
   let currentVertex;
   visited[start] = true;

   while (queue.length) {
     currentVertex = queue.shift();
     result.push(currentVertex);

     this.adjacencyList[currentVertex].forEach(neighbor => {
       if (!visited[neighbor]) {
         visited[neighbor] = true;
         queue.push(neighbor);
       }
     });
   }
   return result;
 }

}

const main = arg => {
    arg = arg.trim().split("\n");
    const N = parseInt(arg[0].split(" ")[0]);
    const M = parseInt(arg[0].split(" ")[1]);
    const K = parseInt(arg[0].split(" ")[2]);
    
    const friend = arg.slice(1, N + 1).map(n=>n.split(" "));
    const block = arg.slice(1 + N, M + (1 + N)).map(n=>n.split(" "));
    
    const map = {};
    const graph = new Graph();
    const blockGraph = new Graph();
    
    for(let i=1; i<=N; i++) {
        graph.addVertex(i);
        blockGraph.addVertex(i);
    }
    
    // 友達
    for(let i=0; i<friend.length; i++) {
        const from = friend[i][0];
        const to   = friend[i][1];
        
        graph.addEdge(from, to); 
    }

    // ブロック
     for(let i=0; i<block.length; i++) {
        const from = block[i][0];
        const to   = block[i][1];
        
        blockGraph.addEdge(from, to); 
    }
    
    let answer = [];
    
    // 友達の隣接ではない && どっかで繋がってる && ブロックじゃない
    for(let i=1; i<=N; i++) {
        let adja = graph.adjacencyList[i].length;
        let bloa = blockGraph.adjacencyList[i].length;
        let tomo = graph.adjacencyList[i]
        
        answer.push((N - 1) - bloa - adja);
    }
    
    console.log(answer.join(" "));
}
main(require('fs').readFileSync('/dev/stdin', 'utf8'));