#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const long long N = 3e5 + 100;
vector<long long> g[N];
set<long long> unused;
void dfs(long long v, long long bad = -1) {
  set<long long> cur = unused;
  unused.clear();
  for (auto u : g[v]) {
    if (cur.count(u) || u == bad) {
      cur.erase(u);
      unused.insert(u);
    }
  }
  for (auto u : cur) dfs(u);
}
signed main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long n, m, k;
  cin >> n >> m >> k;
  for (long long i = 0; i < m; i++) {
    long long v, u;
    cin >> v >> u;
    v--;
    u--;
    g[v].push_back(u);
    g[u].push_back(v);
  }
  for (long long i = 1; i < n; i++) unused.insert(i);
  dfs(0);
  bool ok = (long long)unused.size() == 0;
  ok &= n - 1 - (long long)g[0].size() >= k;
  sort(g[0].begin(), g[0].end());
  for (long long i = 1; i < n; i++) unused.insert(i);
  long long cnt = 0;
  for (long long v = 1; v < n; v++) {
    if (binary_search(g[0].begin(), g[0].end(), v) || !unused.count(v))
      continue;
    dfs(v, 0);
    cnt++;
  }
  ok &= cnt <= k;
  cout << (ok ? "possible\n" : "impossible\n");
}
