#include <bits/stdc++.h>   using namespace std;   set<int> remaining;   set<pair<long long int, long long int> > edge;   int cur = 1;   int cmp[300011];   int bfs(int v) {     int cnt = 0;     queue<int> q;     q.push(v);     vector<int> second;     while (q.size()) {       cnt++;       v = q.front();       q.pop();       cmp[v] = cur;       second.clear();       for (auto x : remaining) {         if (!edge.count({x, v})) {           second.push_back(x);         }       }       for (auto x : second) {         remaining.erase(x);         q.push(x);       }     }     return cnt;   }   int main() {     int n, m, k, u, v;     cin >> n >> m >> k;     for (int j = 0; j < m; j++) {       cin >> u >> v;       edge.insert({u, v});       edge.insert({v, u});     }     for (int i = 2; i <= n; i++) remaining.insert(i);     int cnt = 0;     while (remaining.size()) {       int v = *remaining.begin();       remaining.erase(v);       cnt += bfs(v);       cur++;     }     set<int> q;     int w = 0;     for (int i = 2; i <= n; i++) {       if (!edge.count({1, i})) {         q.insert(cmp[i]);         w++;       }     }     if (q.size() <= k and q.size() > 0 and cnt + 1 == n and         q.size() == cur - 1 and w >= k) {       cout <<  possible ;     } else {       cout <<  impossible ;     }   }   