//if(A<0)A=-A,B=-B; 为啥这里要取反? 如果不取反应该在后面怎么操作呢
#include<bits/stdc++.h>
using namespace std;
int _;
#define endl '\n'
#define int long long
int exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1,y=0;return a;
}
int x1,y1,d;
d=exgcd(b,a%b,x1,y1);
x=y1,y=x1-a/b*y1;
return d;
}
void solve(){
int x,y,m,n,l;
cin>>x>>y>>m>>n>>l;
long long A=n-m,B=x-y;
//if(A<0)A=-A,B=-B;
//为啥这里要取反?
int r=__gcd(A,l);
exgcd(A,l,x,y);
if(B%r) cout<<"Impossible";
else{
int num=(B/r);
x*=num;int k;
if(x<0){
k=(abs(x)+(l/r))/(l/r);
}
else k=-(x/(l/r));
x+=k*(l/r);
cout<<x<<endl;
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
solve();
return 0;
}