#include <bits/stdc++.h>
using namespace std;
struct UnionFind {
  vector<int> par;
  UnionFind(int N) : par(N, -1) {}
  int root(int x) {
    if (par[x] < 0) return x;
    return par[x] = root(par[x]);
  }
  void unite(int x, int y) {
    int rx = root(x);
    int ry = root(y);
    if (rx == ry) return;
    if (par[rx] > par[ry]) std::swap(rx, ry);
    par[rx] += par[ry];
    par[ry] = rx;
  }
  bool same(int x, int y) {
    int rx = root(x);
    int ry = root(y);
    return rx == ry;
  }
  int size(int x) { return -par[root(x)]; }
};
int deg[100005];
vector<int> to[100005];
int main() {
  int N, M, K;
  cin >> N >> M >> K;
  UnionFind friendTree(N);
  int res[N];
  for (int i = 0; i < (M); i++) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    deg[x]++;
    deg[y]++;
    friendTree.unite(x, y);
  }
  for (int i = 0; i < (K); i++) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    to[x].push_back(y);
    to[y].push_back(x);
  }
  for (int i = 0; i < (N); i++) {
    int ans = friendTree.size(i) - 1 - deg[i];
    for (int u : to[i]) {
      if (friendTree.same(i, u)) --ans;
    }
    printf("%d%c", ans, i == N - 1 ? '\n' : ' ');
  }
  return 0;
}
