#include<bits/stdc++.h>
using namespace std;
/*#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>*/
typedef long long ll;
#define N 200001
#define lcm(a,b) ((a*b)/__gcd(a,b))
const ll mod=1e9+7;
ll prime[N];
vector<int>all_primes;
ll prime_factors[N];
void seive()
{
memset(prime,0,sizeof(prime));
prime[0]=1;prime[1]=1;
for(ll i=2;i*i<=N-1;i++)
{
if(prime[i]==0)
{
for(ll j=i*i;j<N;j+=i)
{
prime[j]=1;
}
}
}
for(int i=1;i<N;i++)
{
if(!prime[i])
{
all_primes.push_back(i);
}
}
}
void spf()
{
for(ll i=1;i<N;i++)
{
prime_factors[i]=i;
}
for(ll i=2;i*i<=N-1;i++)
{
for(ll j=i*i;j<=N-1;j+=i)
{
if(prime_factors[j]==j)
prime_factors[j]=i;
}
}
}
//code starts here
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin>>t;
//t=1;
while(t--)
{
ll n,d,a,b,ans;
cin>>n>>d>>a>>b;
if(d<=n)
{
ans=(d*a);
ans+=(max((ll)0,(n-d))*b);
}
else
ans=n*a;
cout<<ans<<"\n";
}
}