#include <bits/stdc++.h>
using namespace std;
inline bool EQ(double a, double b) { return fabs(a - b) < 1e-9; }
vector<int> edge[300007];
queue<int> q;
set<int> vis, one;
void dfs(int i) {
  ;
  int pre = 0;
  for (int j = 0; j < edge[i].size(); j++) {
    while (true) {
      auto it = vis.upper_bound(pre);
      if (it == vis.end()) break;
      if (*it >= edge[i][j]) break;
      pre = *it;
      vis.erase(*it);
      dfs(pre);
    }
    pre = edge[i][j];
  }
}
int main() {
  int n, m, u, v, k, _k, pre, c, i, j, prec;
  scanf("%d %d %d", &n, &m, &k);
  while (m--) {
    scanf("%d %d", &u, &v);
    edge[u].push_back(v);
    edge[v].push_back(u);
  }
  for (i = 1; i <= n; i++) {
    edge[i].push_back(n + 1);
    if (i > 1) vis.insert(i);
    sort(edge[i].begin(), edge[i].end());
  };
  pre = _k = 0;
  for (i = 0; i < edge[1].size(); i++) {
    while (true) {
      auto it = vis.upper_bound(pre);
      if (it == vis.end()) break;
      if (*it >= edge[1][i]) break;
      ;
      pre = *it;
      vis.erase(*it);
      _k++;
      dfs(pre);
    }
    pre = edge[1][i];
  };
  if (_k > k) {
    ;
    printf("impossible\n");
    return 0;
  }
  if (n - edge[1].size() < k) {
    ;
    printf("impossible\n");
    return 0;
  }
  if (vis.size()) {
    ;
    printf("impossible\n");
    return 0;
  }
  printf("possible\n");
  return 0;
}
