#include #include #include #include #include using namespace std ; typedef long long LL ; #define clr( a , x ) memset ( a , x , sizeof a ) #define ls ( o << 1 ) #define rs ( o << 1 | 1 ) #define root 1 , 1 , n #define lson ls , l , mid #define rson rs , mid + 1 , r const int MAXN = 100005 ; const int MAXE = 200005 ; const LL INF = 1e18 ; const int mod = 998244353 ; struct Node { LL x , y ; Node () {} Node ( LL x , LL y ) : x ( x ) , y ( y ) {} bool operator < ( const Node& a ) const { if ( y != a.y ) return y < a.y ; return x > a.x ; } } ; Node seg[MAXN] ; int n ; LL a[MAXN] , L , R ; bool check ( Node& a , Node& b ) { if ( a.y < b.x ) return 0 ; if ( b.y < a.x ) return 0 ; return 1 ; } void solve () { scanf ( "%d%I64d%I64d" , &n , &L , &R ) ; for ( int i = 1 ; i <= n ; ++ i ) { scanf ( "%I64d" , &a[i] ) ; } sort ( a + 1 , a + n + 1 ) ; for ( int i = 1 ; i < n ; ++ i ) { seg[i].x = a[i + 1] - a[i] + 1 ; seg[i].y = a[i + 1] + a[i] - 1 ; } sort ( seg + 1 , seg + n ) ; int cnt = 1 ; for ( int i = 2 ; i < n ; ++ i ) { if ( !check ( seg[cnt] , seg[i] ) ) seg[++ cnt] = seg[i] ; else seg[cnt] = Node ( min ( seg[cnt].x , seg[i].x ) , max ( seg[cnt].y , seg[i].y ) ) ; } LL ans = R - L + 1 ; for ( int i = 1 ; i <= cnt ; ++ i ) { if ( seg[i].y < L ) continue ; if ( seg[i].x > R ) break ; seg[i].x = max ( L , seg[i].x ) ; seg[i].y = min ( R , seg[i].y ) ; ans -= seg[i].y - seg[i].x + 1 ; } printf ( "%I64d\n" , ans ) ; } int main () { int T ; scanf ( "%d" , &T ) ; getchar () ; for ( int i = 1 ; i <= T ; ++ i ) { solve () ; } return 0 ; }