#include <bits/stdc++.h>
#define REP(i, a, n) for (long long i = (a); i < (long long)(n); ++i)
#define REPC(i, a, n) for (long long i = (a); i <= (long long)(n); ++i)
#define ALL(t) t.begin(), t.end()
#define RALL(t) t.rbegin(), t.rend()
#define MATINIT(type, row, col, init) \
  vector<vector<type>>(row, vector<type>(col, init));
#define Yes(cond) cout << (cond ? "Yes" : "No") << endl;
#define YES(cond) cout << (cond ? "YES" : "NO") << endl;
using namespace std;
using LL = long long;
using ULL = unsigned long long;
template <class T>
using VEC = std::vector<T>;
template <class T>
using MAT = std::vector<std::vector<T>>;
void DUMP() { cerr << endl; }
template <class Head, class... Tail>
void DUMP(Head &&head, Tail &&... tail) {
  cerr << head << ", ";
  DUMP(std::move(tail)...);
}
template <typename T>
ostream &operator<<(ostream &os, vector<T> &vec) {
  os << "{";
  for (auto v : vec) os << v << ",";
  os << "}";
  return os;
}
template <typename T>
ostream &operator<<(ostream &os, set<T> &s) {
  os << "{";
  for (auto p : s) os << p << ",";
  os << "}";
  return os;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &os, map<T1, T2> &m) {
  os << "{";
  for (auto p : m) os << p << ",";
  os << "}";
  return os;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &os, pair<T1, T2> p) {
  os << "[" << p.first << " " << p.second << "]";
  return os;
}
class DisjointSet {
  //参考 蟻本p84
  //均し計算量O(α(N))でほぼ定数
  // ついでに各setにサイズ情報を入れた(根なら、そのsetのsize情報を持ってる)

 public:
  static const int MAX_N = 1e5 + 2;

  int par[MAX_N];         // parent
  int rank[MAX_N];        // the depth of trees
  long long size[MAX_N];  // the size of sets
  int element_num;        // the number of elements

  // n要素で初期化
  DisjointSet(int n) {
    element_num = n;
    for (int i = 0; i < n; ++i) {
      par[i] = i;
      rank[i] = 0;
      size[i] = 1;
    }
  }

  // 木の根を求める
  int find(int x) {
    if (par[x] == x) return x;
    return par[x] = find(par[x]);
  }

  // xとyの属する集合を併合
  void unite(int x, int y) {
    x = find(x);
    y = find(y);
    if (x == y) return;
    if (rank[x] < rank[y]) {
      par[x] = y;
      size[y] += size[x];
    } else {
      par[y] = x;
      size[x] += size[y];
      if (rank[x] == rank[y]) rank[x]++;
    }
  }

  // xとyが同じ集合に属するか否か
  bool same(int x, int y) { return find(x) == find(y); }

  friend std::ostream &operator<<(std::ostream &os, const DisjointSet &d);
};
std::ostream &operator<<(std::ostream &os, const DisjointSet &d) {
  os << "i, p, r, s" << std::endl;
  for (int i = 0; i < d.element_num; ++i) {
    os << i << ", " << d.par[i] << ", " << d.rank[i] << ", " << d.size[i]
       << std::endl;
  }
  return os;
}
int parent(DisjointSet &uf, int k) {
  int p = uf.par[k];
  while (k != p) {
    k = p;
    p = uf.par[k];
  }
  return p;
}

// int main() {
//   std::cout << "0" << std::endl;
//   auto d = DisjointSet(10);
//   std::cout << "1" << std::endl;
//   d.unite(1, 2);
//   std::cout << "2" << std::endl;
//   d.unite(2, 3);
//   d.unite(4, 5);
//   d.unite(6, 7);
//   d.unite(5, 7);
//   std::cout << "Display" << std::endl;
//   std::cout << d << std::endl;
//   std::cout << d.same(5, 7) << std::endl;
//   std::cout << d << std::endl;
// }

int main() {
  int N, M, K;
  cin >> N >> M >> K;
  auto uf = DisjointSet(N);
  map<int, set<int>> fr;
  REP(i, 0, M) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    fr[a].insert(b);
    fr[b].insert(a);
    uf.unite(a, b);
  }
  map<int, set<int>> block;
  REP(i, 0, K) {
    int c, d;
    cin >> c >> d;
    c--;
    d--;
    if (c > d) swap(c, d);
    block[c].insert(d);
    block[d].insert(c);
  }

  // REP(i, 0, N) {
  //   DUMP("size", i, uf.size[i]);
  //   DUMP("par", i, uf.par[i]);
  // }
  // REP(i, 0, N) { DUMP("par", i, uf.par[i]); }
  // REP(i, 0, N) { DUMP("parent", i, parent(uf, i)); }
  REP(i, 0, N) {
    int s = uf.size[parent(uf, i)] - 1;
    int nf = fr[i].size();
    int b = 0;
    for (int v : block[i]) {
      if (uf.same(i, v)) b++;
    }
    int ans = s - nf - b;
    // DUMP(i, s, nf, b, ans);
    cout << ans << " ";
  }
  cout<<endl;

  return 0;
}


Measured memory_bytes: 39936