// 
//./C<test

#include <bits/stdc++.h>
#define endl '\\n'
#define cediv(a,b) ((a)%(b)==0?((a)/(b)):((a)/(b))+1)
#define fi first
#define se second
#define pb push_back

using namespace std;

typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;

template<typename T>
inline T umax(T &u, T v){return u = max(u, v);}
template<typename T>
inline T umin(T &u, T v){return u = min(u, v);}

pair<int,int> datas[2020];
int nums[2020]; // 각 canvas에 지금 얼마나 있는지
int pegs[2020];
vector<int> ans;
map<int,int> used; 

int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int n,p;
    cin>>n;
    for(int i=0; i<n; i++){
        cin>>datas[i].fi>>datas[i].se;
    }
    cin>>p;
    for(int i=0; i<p; i++){
        cin>>pegs[i];
        used[pegs[i]]=1;
    }
    sort(pegs, pegs+p);
    sort(datas, datas+n);
    int l=0, r=0;
    for(int i=0; i<n; i++){
        while(l<p && pegs[l]<datas[i].fi) l++;
        if(l>0 && datas[i].fi==pegs[l-1]) l--;
        r=l;
        while(r<p && pegs[r]<=datas[i].se){
            r++;
        }
        nums[i]=r-l;
        //cout<<"debug : "<<i<<' '<<nums[i]<<endl;
        if(nums[i]>=3){
            cout<<"impossible"<<endl;
            return 0;
        }
        l=r;
    }
    for(int i=0; i<n; i++){
        if(nums[i]>=2) continue;
        else if(nums[i]==1){
            if(i!=n-1 && nums[i+1]<2 && datas[i+1].fi==datas[i].se && !used[datas[i].se]){
                ans.push_back(datas[i+1].fi);
                nums[i]++;
                nums[i+1]++;
            }
            else{
                if(!used[(datas[i].se+datas[i].fi)/2]) ans.push_back((datas[i].se+datas[i].fi)/2);
                else ans.push_back((datas[i].se+datas[i].fi)/2 + 1);
            }
        }
        else{
            // nums[i]=0;
            if(i!=n-1 && nums[i+1]<2 && datas[i+1].fi==datas[i].se && !used[datas[i].se]){
                ans.push_back((datas[i].se+datas[i].fi)/2);
                ans.push_back(datas[i+1].fi);
                nums[i]+=2;
                nums[i+1]++;
            }
            else{
                ans.push_back((datas[i].se+datas[i].fi)/2);
                ans.push_back((datas[i].se+datas[i].fi)/2-1);
                nums[i]+=2;
            }
        }
    }
    //sort(ans.begin(), ans.end());
    //for(int i=1; i<ans.size(); i++) assert(ans[i-1]!=ans[i]);
    cout<<ans.size()<<endl;
    for(int i=0; i<ans.size(); i++) cout<<ans[i]<<' ';
    cout<<endl;

    return 0;
}