#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<int> G[N];
vector<int> V;
void BFS(int s) {
  queue<int> Qu;
  Qu.push(s);
  vst[s] = 1;
  while (!Qu.empty()) {
    int u = Qu.front();
    Qu.pop();
    for (int i = 0; i < (int)V.size();) {
      int v = V[i];
      if (vst[v]) continue;
      if (G[u].find(v) == G[u].end()) {
        V[i] = V.back();
        V.pop_back();
        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);
    G[u].insert(v);
    G[v].insert(u);
  }
  for (int i = 2; i <= n; i++) {
    V.push_back(i);
  }
  BFS(1);
  if (!V.empty()) {
    printf("impossible\n");
    return 0;
  }
  for (int i = 2; i <= n; i++) {
    if (G[1].find(i) == G[1].end()) mx++;
  }
  for (int i = 2; i <= n; i++) {
    V.push_back(i);
  }
  memset(vst, 0, sizeof(vst));
  vst[1] = 1;
  for (int i = 0; i < (int)V.size();) {
    if (vst[i]) i++;
    int v = V[i];
    mn++;
    V[i] = V.back();
    V.pop_back();
    BFS(v);
  }
  if (mn <= k && k <= mx)
    printf("possible\n");
  else
    printf("impossible\n");
  return 0;
}
