#include <bits/stdc++.h>
using namespace std;
template <typename T>
ostream &operator<<(ostream &o, vector<T> &vec) {
  cout << "[";
  for (int i = 0; i < ((int)(vec).size()); i++) {
    if (i) cout << ", ";
    cout << vec[i];
  }
  cout << "]";
  return o;
}
template <typename T>
ostream &operator<<(ostream &o, set<T> &vec) {
  cout << "{";
  auto it = vec.begin();
  for (int i = 0; i < ((int)(vec).size()); i++) {
    if (i) cout << ", ";
    cout << *it;
    it++;
  }
  cout << "}";
  return o;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &o, pair<T1, T2> &pair) {
  cout << "(" << pair.first << ", " << pair.second << ")";
  return o;
}
const int MX = 312312;
int V, E, K;
set<int> st;
vector<int> el[MX];
bool vt[MX];
void bfs(int s) {
  queue<int> qe;
  qe.push(s);
  while (((int)(qe).size())) {
    int u = qe.front();
    qe.pop();
    int id = 0;
    int esz = ((int)(el[u]).size());
    vector<int> tod;
    for (auto x : st) {
      while (id < esz and el[u][id] < x) id++;
      if (id < esz and el[u][id] == x) continue;
      qe.push(x);
      tod.push_back(x);
    }
    for (auto x : tod) st.erase(x);
    if (not((int)(st).size())) return;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  const string fail = "impossible";
  const string ok = "possible";
  cin >> V >> E >> K;
  for (int i = 1; i <= V; i++) {
    st.insert(i);
  }
  int d1 = V - 1;
  for (int i = 0; i < E; i++) {
    int u, v;
    cin >> u >> v;
    if (u > v) swap(u, v);
    if (u == 1) d1--;
    el[u].push_back(v);
    el[v].push_back(u);
  }
  for (int i = 1; i <= V; i++) sort(el[i].begin(), el[i].end());
  if (d1 < K) {
    cout << fail << endl;
    return 0;
  }
  bfs(1);
  if (((int)(st).size())) {
    cout << fail << endl;
    return 0;
  }
  for (int i = 2; i <= V; i++) {
    st.insert(i);
  }
  int t = 0;
  while (((int)(st).size())) {
    bfs(*st.begin());
    t++;
  }
  if (t > K) {
    cout << fail << endl;
    return 0;
  }
  cout << ok << endl;
  return 0;
}
