int n;
int TianJi[M], King[M];
int dp[M][M];          //dp[i][j]????????????????????i?????,
                       //?"?"??j?????,?"?"??i-j?????,??????????.
int cmp(const void *a, const void *b)
{
       return *(int *)b - *(int *)a;
}
int profit(int x, int y)
{
       if (TianJi[x] > King[y])
       {
              return 200;
       }
       else if (TianJi[x] < King[y])
       {
              return -200;
       }
       else
       {
              return 0;
       }
}
int main()
{
       int i, j;
       while (scanf("%d", &n) && n != 0)
       {
              memset(dp, 0, sizeof(dp));
              for (i = 1; i <= n; i++)
              {
                     scanf("%d", &TianJi[i]);
              }
              for (i = 1; i <= n; i++)
              {
                     scanf("%d", &King[i]);
              }
              //?????????????????
              qsort(TianJi + 1, n, sizeof(TianJi[0]), cmp);
              qsort(King + 1, n, sizeof(King[0]), cmp);
              //??dp
              for (i = 1; i <= n; i++)
              {
                     //????????????????????????,????????????????????
                     dp[i][0] = dp[i - 1][0] + profit(n - i + 1, i);  
                     //????????????????????????,????????????????
                     dp[i][i] = dp[i - 1][i - 1] + profit(i, i);
                     //?????????????????????????,?????????????????,????i?????????
                     for (j = 1; j < i; j++)
                     {
                            dp[i][j] = max( ( dp[i - 1][j] + profit(n - (i - j) + 1, i) ), ( dp[i - 1][j - 1] + profit(j, i) ) );
                     }
              }
              //????????
              int ans = -99999999;
              for (i = 0; i <= n; i++)
              {
                     if (ans < dp[n][i])
                     {
                            ans = dp[n][i];
                     }
              }
              printf("%d\n", ans);
       }
       return 0;
}

