#include <bits/stdc++.h>
using ll = int64_t;
using namespace std;
template <class T>
struct UnionFind {
  vector<T> d;
  UnionFind(T n = 0) : d(n, -1) {}
  T find(T x) {
    if (d[x] < 0) return x;
    return d[x] = find(d[x]);
  }
  bool unite(T x, T y) {
    x = find(x);
    y = find(y);
    if (x == y) return false;
    if (d[x] < d[y]) swap(x, y);
    d[y] += d[x];
    d[x] = y;
    return true;
  }
  bool same(T x, T y) { return find(x) == find(y); }
  T size(T x) { return -(d[find(x)]); }
};
int main() {
  ll n, m, k;
  cin >> n >> m >> k;
  vector<ll> fr(100005);
  vector<ll> bl[100005];
  UnionFind<ll> uf(n);
  for (int i = 0; i < (m); ++i) {
    int a, b;
    cin >> a >> b;
    --a;
    --b;
    fr[a]++;
    fr[b]++;
    uf.unite(a, b);
  }
  for (int i = 0; i < (k); ++i) {
    int a, b;
    cin >> a >> b;
    --a;
    --b;
    bl[a].push_back(b);
    bl[b].push_back(a);
  }
  for (int i = 0; i < (n); ++i) {
    int ans;
    ans = uf.size(i) - 1 - fr[i];
    for (int a : bl[i]) {
      if (uf.same(i, a)) ans--;
    }
    cout << ans << " ";
  }
  return 0;
}
