#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  x = 0;
  char ch;
  while (!isdigit(ch = getchar()))
    ;
  do {
    x = 10 * x + ch - '0';
  } while (isdigit(ch = getchar()));
}
const int N = 3e5 + 111;
int n, m, k, mn, mx;
bool vst[N];
set<pair<int, int> > E;
set<int> St;
void BFS(int s) {
  queue<int> Qu;
  Qu.push(s);
  St.erase(s);
  vst[s] = 1;
  while (!Qu.empty()) {
    int u = Qu.front();
    Qu.pop();
    for (auto i = St.begin(); i != St.end();) {
      int v = *i;
      if (E.find(make_pair(u, v)) == E.end()) {
        auto j = i;
        j++;
        St.erase(i);
        i = j;
        Qu.push(v);
        vst[v] = 1;
      } else
        i++;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  read(n);
  read(m);
  read(k);
  for (int i = 1; i <= m; i++) {
    int u, v;
    read(u);
    read(v);
    E.insert(make_pair(u, v));
    E.insert(make_pair(v, u));
  }
  for (int i = 1; i <= n; i++) {
    St.insert(i);
  }
  BFS(1);
  for (int i = 1; i <= n; i++) {
    if (!vst[i]) {
      printf("impossible\n");
      return 0;
    }
  }
  for (int i = 2; i <= n; i++) {
    if (E.find(make_pair(1, i)) == E.end()) mx++;
  }
  for (int i = 2; i <= n; i++) {
    St.insert(i);
  }
  memset(vst, 0, sizeof(vst));
  vst[1] = 1;
  for (int i = 2; i <= n; i++) {
    if (vst[i]) continue;
    mn++;
    BFS(i);
  }
  if (mn <= k && k <= mx)
    printf("possible\n");
  else
    printf("impossible\n");
  return 0;
}
