#include<bits/stdc++.h>
using namespace std;
struct UnionFind
{
  vector<int> Parent;
  UnionFind(int n):Parent(n,-1){}
  int Root(int y){return Parent.at(y)<0?y:Parent.at(y)=Root(Parent.at(y));}
  bool Unite(int x,int y)
  {
    if((x=Root(x))==(y=Root(y)))return true;
    else
    {
      if(-Parent.at(x)<-Parent.at(y))swap(x,y);
      Parent.at(x)+=Parent.at(y);
      Parent.at(y)=x;
      return false;
    }
  }
  int Size(int y){return -Parent.at(Root(y));}
};
int main()
{
  int a,b,c,d,N,M,K;
  cin>>N>>M>>K;
  UnionFind uf(N);
  vector<int> known(N);
  while(M--)
  {
    cin>>a>>b;
    a--,b--;
    uf.Unite(a,b);
    known.at(a)++,known.at(b)++;
  }
  while(K--) 
  {
    cin>>c>>d;
    c--,d--;
    if(uf.Root(c)==uf.Root(d))known.at(c)++,known.at(d)++;
  }
  for(int i=0;i<N;i++)cout<<(uf.Size(i)-known.at(i)-1)<<" ";
  return cout<<endl,0;
}