#include <bits/stdc++.h>
using namespace std;
double abss(double a) {
  if (a < 0) return -a;
  return a;
}
int main() {
  int n, m, k, a, b, c, q;
  cin >> n >> m >> k;
  vector<vector<int>> x(n);
  vector<bool> f(n, true);
  vector<int> p(n, -1), r(n);
  set<pair<int, int>> s;
  int h, w;
  h = w = 0;
  for (int i = 0; i < m; i++) {
    cin >> a;
    cin >> b;
    if (a > b) swap(a, b);
    a--;
    b--;
    if (a != 0) {
      x[a].push_back(b);
      x[b].push_back(a);
    } else {
      f[b] = false;
    }
  }
  for (int i = 1; i < n; i++) {
    r[i] = 0;
    s.insert(make_pair(r[i], i));
  }
  while (s.size()) {
    auto i = begin(s);
    a = i->second;
    if (i->first == w) {
      c = a;
      h = w;
    } else {
      if (i->first >= h) {
        h = w;
      }
    }
    p[a] = c;
    for (int j = 0; j < x[a].size(); j++) {
      b = x[a][j];
      if (r[b] >= h) {
        s.erase(make_pair(r[b], b));
        r[b]++;
        s.insert(make_pair(r[b], b));
      }
    }
    w++;
    s.erase(make_pair(r[a], a));
  }
  unordered_set<int> ss;
  q = 0;
  for (int i = 1; i < n; i++) {
    ss.insert(p[i]);
    if (f[i]) q++;
  }
  if ((ss.size() <= k) && (q >= k)) {
    for (int i = 1; i < n; i++) {
      if (f[i]) {
        a = p[i];
        if (ss.count(a) != 0) {
          ss.erase(a);
        }
      }
      if (ss.size() == 0) {
        cout << "possible";
        return 0;
      }
    }
  }
  cout << "impossible";
  return 0;
}
